正则表达式匹配多个初始令牌与常见的跟随令牌

时间:2014-10-19 03:03:18

标签: regex

给出一个字符串:

ASSUME @pete, @grey and @matt_c ARE really tall

有没有办法可以使用正则表达式来提取:

MATCH 1
1.  `@pete`
2.  `really tall`
MATCH 2
1.  `@grey`
2.  `really tall`
MATCH 3
1.  `@matt_c`
2.  `really tall`

此外,有没有办法我可以使用@为每个人都是可选的?

约束:语法必须是ASSUME [names] ARE [statement]的形式,其中:

  • [name]由一个或多个[name]组成,由, (space)&and
  • 分隔
  • [name]由字母数字+下划线或破折号
  • 组成

很高兴回答有关设置的任何问题。我可以在此处找到我正在努力开展工作的示例字符串的起点:http://regex101.com/r/fS9oK5/4

3 个答案:

答案 0 :(得分:1)

我想你想要这样的东西,

ASSUME (@\w+(?:(?:,?\s@\w+)*\s*and\s*@\w+)?)\sARE\s(.+)

DEMO

答案 1 :(得分:1)

您需要使用Positive Lookahead来捕捉重叠的匹配。

(?=(@[\w-]+).*ARE\s*(.+))

Live Demo

答案 2 :(得分:0)

与接受的答案略有不同:
你实际上会消耗第一个子模式

(@[\w-]+)(?=.*ARE\s(.+))

Demo

明确匹配ASSUME,具体取决于您的引擎和\G选项

(?:^ASSUME\s*|\G[^@]*)(@[\w-]+)(?=.*ARE\s(.+))  

Demo