Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对于下面这样的正则表达式,只捕获数字而不是输入中的其他文本_Java - Fatal编程技术网

Java 对于下面这样的正则表达式,只捕获数字而不是输入中的其他文本

Java 对于下面这样的正则表达式,只捕获数字而不是输入中的其他文本,java,Java,当前,此正则表达式: ^(?:\\S+\\s+)*?(\\S+)\\s+(?:No\\.\\s+)?(\\S+)(?:\\s+\\(.*?\\))?$ 捕获418—第2组中的最终,输入如下: String text="H.B. 418—FINAL VERSION"; 如何更改此正则表达式以仅捕获group2中“418”的数字(位数)? 编辑: 我仍然想在前面的一组中捕捉“H.B.” 只需将第二组的边界更改为仅包含数字即可。要保存“H.B.”部分,请在该部分周围

当前,此正则表达式:

^(?:\\S+\\s+)*?(\\S+)\\s+(?:No\\.\\s+)?(\\S+)(?:\\s+\\(.*?\\))?$
捕获
418—第2组中的最终
,输入如下:

String text="H.B. 418—FINAL VERSION";
如何更改此正则表达式以仅捕获group2中“418”的数字(位数)? 编辑:


我仍然想在前面的一组中捕捉“H.B.”

只需将第二组的边界更改为仅包含数字即可。要保存“H.B.”部分,请在该部分周围添加偏执:

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

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

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

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

将组2替换为
(\\d+\\S+)
。这将捕获组3中的数字。所有其他组将被移动一个,因此
(?:No\\\.\\s+
将成为第4组,等等@ajb谢谢。我不是regex忍者,所以我不知道
?:
,但我仍然可以诊断这个。谢谢如果你不需要完整的版本号,这也行。但我还是想在一组中捕获“H.B.”。使用此表达式后,它在group1@Phoenix:更新以获得组1中的“H.B.”和组2中的数字。@Keppil第一个
(?:\\S+\\S+*?
不会捕获任何内容,除非字符串中的某个地方有“否”或数字序列前有多个单词,所以我认为不应该删除它。(注意*后面的?表示“尽可能少的匹配项”。)此外,您的答案将包括捕获组中的以下空格,这不是所需要的。下面的
(\\S+
会像OP通缉犯一样捕获“H.B.”。@ajb:你错了,第一组为给定的文本找到一个匹配项,但它不包含
。好的,我修复了它并测试了它。