gpt4 book ai didi

java - 正则表达式捕获重复内的组

转载 作者:行者123 更新时间:2023-12-01 10:37:15 25 4
gpt4 key购买 nike

我试图从字符串中提取每个整数值。该字符串包含重复 1 到 7 次的部分。每个部分有 4 个整数值。

kjlfdiuadfj FOO1:   176 3171    441 FOO2:   164 4499    340 FOO3:   1812    7244    1255    FOO4:   288 5290    771 jkajkdfldj

我正在尝试构建一个正则表达式来唯一标识每个重复部分中的每个整数。

(FOO(\d):\s+(\d+)\s+(\d+)\s+(\d+)\s+){1,7}

当我运行此模式时,正则表达式组匹配如下:

1: <The entire original string>
2: 4
3: 288
4: 5290
5: 771

注意组 2-5 仅匹配最后(第 4)次重复。为什么前 3 个重复不匹配?如何从每次重复中提取全部 4 个整数?

最佳答案

Notice groups 2-5 match only the last (4th) repetition. Why aren't the first 3 repetitions matched? How can I extract all 4 integers from each repetition?

我相信您会发现第 1 组也仅匹配第四个重复。另一方面,第 0 组将始终对应于整场比赛 - 我怀疑这就是您所看到的。

此行为记录在 the API docs for java.util.regex.Pattern 中:

Capturing groups are numbered by counting their opening parentheses from left to right.

[...]

Group zero always stands for the entire expression.

[...]

The captured input associated with a group is always the subsequence that the group most recently matched.

这在不同的正则表达式实现中都是相当标准的。

您可以通过 Matcher.find() 和/或 Matcher.lookingAt() 一次处理一个字符串,而不是一次捕获全部字符串>,使用与其中一个重复单元完全对应的模式。每次成功匹配后,提取并存储该匹配的捕获组。

关于java - 正则表达式捕获重复内的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34598016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com