我试图获取特定单词后面的括号和字符串末尾之间的所有单词。
例如,我有这样的案例:
p " some other text in downcase LOREM (foo, bar)".scan(/ LOREM \((.*?)\)\z/m)
# [["foo, bar"]]
正则表达式正在获取括号之间的 foo, bar
,没关系,但我想将它们作为单个数组中的两个单独的元素,意思是:
["foo", "bar"]
也就是说,正则表达式应该将每个单词分组为一个单独的元素。
我的目的是获取 LOREM(
和最后一个右括号 )
之间的所有内容。
我尝试添加 (\b\w+\b)
,它将字符串中的每个单词分组。但是,当将其添加到尝试从括号中获取单词时,它不会返回任何内容。
最佳答案
您可以使用
.scan(/(?:\G(?!\A)\s*,\s*|\sLOREM\s+\()\K\w+(?=[^()]*\)\z)/
请参阅Ruby demo和 Rubular regex demo 。您可以将 \w+
替换为 [[:alnum:]]+
或 \p{L}+
(仅匹配字母),或 [^\s,()]+
(匹配除空格、、
、(
和 之外的任何 1+ 个字符)
),这完全取决于您想要在括号内匹配的内容。
详细信息
(?:\G(?!\A)\s*,\s*|\sLOREM\s+\()
- 上一次成功匹配的结尾和,
包含 0+ 空格,或空格、LOREM
、1+ 空格和(
\K
- 省略目前匹配的文本\w+
- 消耗 1+ 个单词字符(?=[^()]*\)\z)
- 紧邻右侧,必须有 0 个或多个除(
和之外的字符>)
,然后是字符串末尾的)
。
关于Regex Ruby 如何对括号内的每个单词进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58449921/