目前这个正则表达式:
^(?:\\S+\\s+)*?(\\S+)\\s+(?:No\\.\\s+)?(\\S+)(?:\\s+\\(.*?\\))?$
在第 2 组中捕获418—FINAL
输入,例如:
String text="H.B. 418—FINAL VERSION";
如何更改此正则表达式以仅捕获 group2 中“418”的数字(位数)?编辑:
我仍然想在前一组中捕获“HB”。
目前这个正则表达式:
^(?:\\S+\\s+)*?(\\S+)\\s+(?:No\\.\\s+)?(\\S+)(?:\\s+\\(.*?\\))?$
在第 2 组中捕获418—FINAL
输入,例如:
String text="H.B. 418—FINAL VERSION";
如何更改此正则表达式以仅捕获 group2 中“418”的数字(位数)?编辑:
我仍然想在前一组中捕获“HB”。
只需将第二组的边界更改为仅包含数字即可。要同时保存“HB”部分,请在该部分周围添加括号:
^(?:(\\S+)\\s+)*?(\\d+)\\S+\\s+(?:No\\.\\s+)?(\\S+)(?:\\s+\\(.*?\\))?$
我不完全确定您的确切要求是什么(您的正则表达式正在寻找可选的“否”,但您没有给出任何示例)。但这将适用于您给出的示例:
^(?:\\S+\\s+)*?(\\S+)\\s+(?:No\\.\\s+)?(\\d+).*(?:\\s+\\(.*?\\))?$
假设您不需要数字后面的文本。也就是说,只需将第二个\S 更改为\d。我还在此之后添加了 .* 以匹配数字后面的任何剩余字符,直到可选的括号部分(不捕获它们,但如果您愿意,可以捕获它们)。