在每个单词之前用大写字母放置逗号和空格

时间:2014-07-10 16:13:55

标签: ruby regex

我正在使用ruby,我试图在每个单词之前放置一个逗号和一个空格,除了开头的单词之外还有一个大写字母。

str = Taxonomy term Another term One more

puts str.gsub(/\s/, ', ')

输出> Taxonomy, term, Another, term, One, more

期望的输出> Taxonomy term, Another term, One more

我的正则表达式技巧非常生疏,所以我只是停留在这个阶段。

知道如何达到我想要的输出吗?

7 个答案:

答案 0 :(得分:5)

您可以捕获大写字母并在替换中使用它。

str.gsub(/\s(\p{lu})/, ', \1')

使用\p{lu}将匹配任何Unicode大写字母。

puts "Taxonomy term Another term Ōne ĺess".gsub(/\s(\p{lu})/, ', \1');

Output:
Taxonomy term, Another term, Ōne ĺess

答案 1 :(得分:4)

模式:

\s(?=[A-Z])

DEMO

你的代码就是,

puts str.gsub(/\s(?=[A-Z])/, ", ")

\s(?=[A-Z])匹配大写字母后面的空格。然后匹配的空格将替换为逗号后跟空格。

答案 2 :(得分:2)

您最好不要插入新空间。使用那里的那个。

"Taxonomy term Another term One more"
.gsub(/(?=\s+[A-Z])/, ",")
# => => "Taxonomy term, Another term, One more"

答案 3 :(得分:1)

这个怎么样:

str.gsub(/\s(?<capital>[A-Z])/, ', \k<capital>')

这个将在大写字符上进行命名匹配,并用逗号替换它,然后再用空格和字符替换它。

我希望有所帮助。

答案 4 :(得分:1)

如果你对你所尝试的事情产生了情感上的依恋:

str = "Taxonomy term Another term One more"

s = str.gsub(/\s/, ', ')
  #=> "Taxonomy, term, Another, term, One, more"

你可以gsub

s.gsub(/, ([a-z]+)/,' \1')
  #=> "Taxonomy term, Another term, One more"

把它放在一起:

str.gsub(/\s/, ', ').gsub(/, ([a-z]+)/,' \1')
  #=> "Taxonomy term, Another term, One more"

答案 5 :(得分:0)

puts str.gsub(/\s(?=[A-Z])/, ", ") # => Taxonomy term, Another term, One more

答案 6 :(得分:0)

irb(main):001:0> 'Taxonomy term Another term One more'.gsub(/\s+([A-Z])/, ', \1')
=> "Taxonomy term, Another term, One more"