【发布时间】:2016-09-21 12:57:25
【问题描述】:
鉴于我正在经历奇怪的捕获组行为,因此遵循文本数据。 当我尝试遍历所有表时,只有最后一行数据。有没有办法维护所有捕获组,而不仅仅是最后一行(每个表的值)?
我正在使用这种模式(?<tabname>\S+)\n\=*\n(?:(\d+)\ *\|\ *(\d+)\n)+
TABLE1
=======
1 | 2
15 | 2
3 | 15
TABLE2
=======
3 | 5
12 | 2
17 | 7
编辑:抱歉我的问题不一致,这里是我的预期和实际输出:
预期的输出将是:
第 1 场,共 2 场:
Group "tabname": TABLE1
Group 2: 1
Group 3: 2
Group 4: 15
Group 5: 2
Group 6: 3
Group 7: 15
第 2 场,共 2 场:
Group "tabname": TABLE2
Group 2: 3
Group 3: 5
Group 4: 12
Group 5: 2
Group 6: 17
Group 7: 7
但实际输出是:
第 1 场,共 2 场:
Group "tabname": TABLE1
Group 2: 3
Group 3: 15
第 2 场,共 2 场:
Group "tabname": TABLE1
Group 2: 17
Group 3: 7
【问题讨论】:
-
什么是正则表达式风格/语言?你的意思是你有类似
(?<tabname>\S+)\n\S*\n(?:(\d+)\s*\|\s*(\d+)(?:$|\n))*的东西吗?请注意,在 Java 中,重复的捕获组总是被重写,并且只保留最后一个。 -
@WiktorStribiżew Java
-
你想捕捉什么?
-
@rock321987 表名,所有数据为编号的捕获组
-
所有数据都作为编号的捕获组 - 请您将确切的预期输出添加到问题中,好吗?
标签: java regex backtracking capturing-group