Ruby正则表达式提取{| | }

时间:2014-01-29 13:44:15

标签: ruby regex

如何从文本

中获取{}中包含的单个单词
an example of the text {Creating|Making|Producing} blah blah blah

凭借我有限的正则表达式知识,我已经掌握了这一点

text.scan(/{([^}]*)}/)

这只是给了我{Creating|Making|Producing},但我希望Creating Making Producing

谢谢!

4 个答案:

答案 0 :(得分:3)

你可以split找到匹配。

text.scan(/{([^}]*)}/)[0][0].split('|')

更简单的正则表达式可能是:

text.scan(/{(.*?)}/)

说明:

  • { - {个字符
  • .*?} - 遇到第一个(.*?字符之前的任何内容(}

答案 1 :(得分:2)

另一个:

s = 'an example of the text {Creating|Making|Producing} blah blah blah'
s.scan(/(?<=[|{])[A-Za-z]+(?=[}|])/)
# => ["Creating", "Making", "Producing"]

(?<=pat) :

  

正面的后瞻断言:确保前面的字符匹配pat,但不包括匹配文本中的那些字符

(?=pat) :

  

积极前瞻断言:确保以下字符匹配pat,但不包括匹配文本中的那些字符

同时查看Rubular

更新根据 @Mike Campbell 的评论。

s = 'an example of the text {Creating|Making|Producing} blah {foo} blah |bla|'
s.scan(/(?<={)[a-z|]+(?=})/i).flat_map { |m| m.split("|") }
# => ["Creating", "Making", "Producing", "foo"]

再次查看Rubular

答案 2 :(得分:1)

您可以简单地跳过第一个和最后一个字符,而不是正则表达式。

str = "{Creating|Making|Producing}"
str[1..-2].split('|')
=> ["Creating", "Making", "Producing"]

答案 3 :(得分:0)

s = 'an example of the text {Creating|Making|Producing} blah blah blah'

s.scan(/(?<={).*(?=})/).map{|i| i.split("|") }.flatten  
# => ["Creating", "Making", "Producing"]

s.scan(/(?<={).*(?=})/).first.split("|")    
# => ["Creating", "Making", "Producing"]