regex - 如何在正则表达式中匹配不同的组

标签 regex ruby capture-group

我有以下字符串:

"Josua de Grave* (1643-1712)"

* 之前的所有内容都是人名,第一个日期 1634 是他的出生日期,1712 是他的死亡日期。

按照这个逻辑,我希望每个项目都有 3 个匹配组。我试过了

([a-zA-Z|\s]*)\* (\d{3,4})-(\d{3,4})
"Josua de Grave* (1643-1712)".match(/([a-zA-Z|\s]*)\* (\d{3,4})-(\d{3,4})/)

但是返回零。

为什么我的逻辑错误,我应该怎么做才能获得 3 个预期的匹配组。

最佳答案

需要在正则表达式模式中添加数字 1643-1712 值周围的附加括号 ( ),因此请使用

([a-zA-Z\s]*)\* \((\d{3,4})-(\d{3,4})\)
//               ^^                   ^^

由于括号代表捕获的组,因此使用 \ 将它们转义以将它们作为字符进行匹配。

关于regex - 如何在正则表达式中匹配不同的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60241381/

相关文章:

regex - 重复单词的正则表达式

python - 为什么 PLY 对待正则表达式与 Python/re 不同?

python - 如何测试正则表达式匹配

java - 定位非法状态异常错误

python - 选择用\n 分隔的 <p> 标记

ruby-on-rails - 通过 HTTP、Ruby(无 ROR)序列化/反序列化对象

c - 正则表达式 URL 捕获组

ruby-on-rails - 如何使用 Twitter API 回复特定推文?

ruby-on-rails - 如何从场景中获取步骤定义中的@tag? - ruby

正则表达式:捕获组内的捕获组