我正在使用ruby,我试图在每个单词之前放置一个逗号和一个空格,除了开头的单词之外还有一个大写字母。
str = Taxonomy term Another term One more
puts str.gsub(/\s/, ', ')
输出> Taxonomy, term, Another, term, One, more
期望的输出> Taxonomy term, Another term, One more
我的正则表达式技巧非常生疏,所以我只是停留在这个阶段。
知道如何达到我想要的输出吗?
答案 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])
你的代码就是,
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"