【问题标题】:Add a character each x characters in Ruby在Ruby中每x个字符添加一个字符
【发布时间】:2011-01-05 02:19:20
【问题描述】:

我想在我的 Ruby on Rails 字符串中打断一个长单词(类似于 HTML 中的 <wbr>)。

是否可以告诉 Ruby 在字符串 y 的每个 z 字符中添加字符 x

【问题讨论】:

    标签: ruby regex string character


    【解决方案1】:

    试试

    result = subject.gsub(/(.{10})/m, '\1XX')
    

    用你想要的数字替换10,用你想要的替换字符串替换XX

    【讨论】:

      【解决方案2】:

      在 Perl 中,它将位于 s/(\w{42})/$1\n/g 的某处

      【讨论】:

        【解决方案3】:

        我不熟悉 Rails,但在纯 Ruby 中,您始终可以编写自己的。不知道你为这样的事情放弃了多少速度。

        def addcharacter(num, char, string)
         x = 0
         resultstring = ""
         string.each_byte do |byte|
           resultstring << byte.chr
           x += 1
           if x == num
           resultstring << char
           x = 0
           end
        
         end
        
           return resultstring
         end
        
         mystring = "hello there"
        
         a = addcharacter(2,"*",mystring)
         puts a
        

        【讨论】:

        • 小心使用each_byte 处理类似的事情。它仅在字符为字节(即 ASCII)时才有效。 UTF-* 编码的字符串会出现奇怪的行为。
        【解决方案4】:

        如果您的原始字符串是 str = "0123456789abcde" 并且您想要:

        • 01234XXX56789XXXabcdeXXX:: 使用str.gsub(/.{5}/, '\&amp;XXX')
        • 01234XXX56789XXXabcde :: 使用str.scan(/.{5}/).join('XXX')

        这些会为str = "012345678abcdef" 产生略微不同的输入

        • 01234XXX56789XXXabcdeXXXf:: 来自str.gsub(/.{5}/, '\&amp;XXX')
        • 01234XXX56789XXXabcde:: 来自str.scan(/.{5}/).join('XXX')
        • 01234XXX56789XXXabcdeXXXfXXX:: 来自str.gsub(/.{1,5}/, '\&amp;XXX')
        • 01234XXX56789XXXabcdeXXXf :: 来自str.scan(/.{1,5}/).join('XXX')

        【讨论】:

          【解决方案5】:

          可以使用没有反向引用的正则表达式。

          让我们将 'XX' 添加到 'My dog has fleas' 每个 n = 3 个字符:

          'My dog has fleas'.gsub(/.{#{n}}\K/, 'XX')
            #=> "My XXdogXX haXXs fXXleaXXs"
          

          正则表达式读取,“匹配 n 个字符,然后 (\K) 丢弃所有以前的匹配并将正则表达式的字符串指针重置为当前位置(就在这 n 个字符之后和下一个字符之前)”。

          对于给定的示例,字符串指针最初位于字符串的开头。 .{3} 匹配字符串的前三个字符 'My '\K 丢弃匹配项并将字符串指针重置为第三个和第四个字符' ''d' 之间的(零宽度)位置。 gsub 将零宽度匹配替换为 'XX' 并且字符串指针保留在 'd' 之前。下一个匹配是'dog'\K 丢弃匹配并重置字符串指针,即'g'' ' 之间的零宽度位置,替换为'XX' 等等。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-07-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-07-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多