2015-04-03 50 views
0

我有以下字符串class teacher john smith pupils max power al bundy 如何捕获史密斯先生班级的所有学生与命名组?捕获重复命名组

我创造了这个正则表达式 (?:^class teacher)(?<teacher>(?<first>\w+) (?<last>\w+)) pupils (?<pupil>(?<pfirst>\w+) (?<plast>\w+))+ 但它是撇开学生al bundy

对Java和Regex101进行了测试。

回答

2

您无法重复捕获组,因为上次匹配的值会覆盖上一个。

来解决这类问题的方法包括使用find方法与\G锚取得连续两场比赛:

(?:\G(?!\A) |\Aclass teacher (?<teacher>(?<first>\w+) (?<last>\w+)) pupils)(?<pupil>(?<pfirst>\w+) (?<plast>\w+)) 

demo

(显然的另一种方式是捕获所有学生在一个组中并且在它之后分开)

+0

Thx。是的,另一种方式是一个有效的选择。由于我正在寻找** easy **,声明性的方式从字符串中提取数据(shell命令)。 – mike 2015-04-03 02:14:42