【问题标题】:Add space after commas only if it doesn't already?仅在逗号之后添加空格,如果它还没有?
【发布时间】:2014-05-21 18:48:01
【问题描述】:

有没有办法只在不存在的情况下在字符串中的逗号后添加空格。

例子:

word word,word,word,

最终会变成

word word, word, word,

ruby 或 rails 中是否有函数可以做到这一点?

这将用于数十万个句子,因此它需要快速(性能很重要)。

【问题讨论】:

    标签: ruby-on-rails ruby regex ruby-on-rails-3 ruby-on-rails-4


    【解决方案1】:

    使用负前瞻检查逗号后没有空格,然后用逗号和空格替换。

    print 'word word,word,word,'.gsub(/,(?![ ])/, ', ')
    

    【讨论】:

    • 这是更好的解决方案,而且速度明显更快
    • @ArupRakshit [ ] 表示空间。 (?![ ]) 表示后面没有空格。而,(?![ ]) 表示后面没有空格的逗号。这样我们就可以用逗号+空格替换逗号(不带空格)。
    • 是的。我只能使用没有字符类的空间。但为了更容易理解,我在[] 中使用了空格。
    • tumi khub vlo Regex e... :)
    【解决方案2】:

    只需使用正则表达式将"," 的所有实例替换为", " 后面没有空格。

    str = "word word,word,word,"
    
    str = str.gsub(/,([^ ])/, ', \1') # "word word, word, word,"
    

    【讨论】:

      【解决方案3】:

      如果字符串不包含多个相邻空格(或不应包含此类),则不需要正则表达式:

      "word word, word, word,".gsub(',', ', ').squeeze(' ')
        #=> "word word, word, word, "
      

      【讨论】:

        【解决方案4】:

        添加缺失的空格:

         "word word,word,word,".gsub(/,(?=\w)/, ', ') # "word word, word, word,"
        

        如有必要,删除最后一个不必要的逗号

        "word word,word,word,".gsub(/,(?=\w)/, ', ').sub(/,\Z/, '') # "word word, word, word"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-01-28
          • 2011-09-08
          • 2021-10-20
          • 2019-02-14
          • 2012-09-15
          • 2017-03-18
          • 2021-12-20
          • 1970-01-01
          相关资源
          最近更新 更多