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/

相关文章:

python - 正则表达式模式以匹配 python 中的日期时间

ruby-on-rails - 使用 HStore 和 rails 4 的动态表单

javascript - JS split() 正则表达式与单个结果数组的三个匹配

ruby - Rails 迁移 : Drop table and change references

ruby-on-rails - WOPI Host 实现,尝试在 iframe 中呈现文档

javascript - 多行字符串中任意数量的捕获组

java - 在java正则表达式中捕获同一组的多个实例

ruby - 解析地址的正则表达式

python - 将 URL 转换为 HTML 链接

regex - 在 Swift 中使用模板的 NSRegularExpression