如何从文本
中获取{}
中包含的单个单词
an example of the text {Creating|Making|Producing} blah blah blah
凭借我有限的正则表达式知识,我已经掌握了这一点
text.scan(/{([^}]*)}/)
这只是给了我{Creating|Making|Producing}
,但我希望Creating
Making
Producing
谢谢!
答案 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"]