0

目前这个正则表达式:

^(?:\\S+\\s+)*?(\\S+)\\s+(?:No\\.\\s+)?(\\S+)(?:\\s+\\(.*?\\))?$

在第 2 组中捕获418—FINAL输入,例如:

String text="H.B. 418—FINAL VERSION";

如何更改此正则表达式以仅捕获 group2 中“418”的数字(位数)?编辑:

我仍然想在前一组中捕获“HB”。

4

2 回答 2

2

只需将第二组的边界更改为仅包含数字即可。要同时保存“HB”部分,请在该部分周围添加括号:

^(?:(\\S+)\\s+)*?(\\d+)\\S+\\s+(?:No\\.\\s+)?(\\S+)(?:\\s+\\(.*?\\))?$
于 2013-07-23T21:37:41.140 回答
0

我不完全确定您的确切要求是什么(您的正则表达式正在寻找可选的“否”,但您没有给出任何示例)。但这将适用于您给出的示例:

^(?:\\S+\\s+)*?(\\S+)\\s+(?:No\\.\\s+)?(\\d+).*(?:\\s+\\(.*?\\))?$

假设您不需要数字后面的文本。也就是说,只需将第二个\S 更改为\d。我还在此之后添加了 .* 以匹配数字后面的任何剩余字符,直到可选的括号部分(不捕获它们,但如果您愿意,可以捕获它们)。

于 2013-07-23T21:52:14.677 回答