Regex Ruby 如何对括号内的每个单词进行分组

标签 regex ruby

我试图获取特定单词后面的括号和字符串末尾之间的所有单词。

例如,我有这样的案例:

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 demoRubular 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/

相关文章:

PHP 使用正则表达式验证 CRON

regex - Perl 文件逐行读取 (RegEx)

ruby - 使用 Twitter Oauth 进行服务认证

ruby - 使用 rvm 获取 ruby​​ 1.9.3 的源代码

ruby-on-rails - Group by 和 order by 在 Rails 中有很多直通模型

python - 用于提取以 Mr.|Mrs|The|DR 开头的姓名的正则表达式

javascript - 正则表达式在 CKeditor 的 HTML 中查找 png-gif-jpg 图像链接

java - Java中如何使用正则表达式解析HTML?

ruby-on-rails - 如何在 Ruby on Rails 中使用 TCPServer?

ruby-on-rails - 如何在 Faraday 中启用日志记录主体