【发布时间】: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
有没有办法只在不存在的情况下在字符串中的逗号后添加空格。
例子:
word word,word,word,
最终会变成
word word, word, word,
ruby 或 rails 中是否有函数可以做到这一点?
这将用于数十万个句子,因此它需要快速(性能很重要)。
【问题讨论】:
标签: ruby-on-rails ruby regex ruby-on-rails-3 ruby-on-rails-4
使用负前瞻检查逗号后没有空格,然后用逗号和空格替换。
print 'word word,word,word,'.gsub(/,(?![ ])/, ', ')
【讨论】:
[ ] 表示空间。 (?![ ]) 表示后面没有空格。而,(?![ ]) 表示后面没有空格的逗号。这样我们就可以用逗号+空格替换逗号(不带空格)。
[] 中使用了空格。
只需使用正则表达式将"," 的所有实例替换为", " 后面没有空格。
str = "word word,word,word,"
str = str.gsub(/,([^ ])/, ', \1') # "word word, word, word,"
【讨论】:
如果字符串不包含多个相邻空格(或不应包含此类),则不需要正则表达式:
"word word, word, word,".gsub(',', ', ').squeeze(' ')
#=> "word word, word, word, "
【讨论】:
添加缺失的空格:
"word word,word,word,".gsub(/,(?=\w)/, ', ') # "word word, word, word,"
如有必要,删除最后一个不必要的逗号
"word word,word,word,".gsub(/,(?=\w)/, ', ').sub(/,\Z/, '') # "word word, word, word"
【讨论】: