在具有正则表达式的Java中,如何从长度未知的字符串中捕获数字?

问题描述 投票:-1回答:1

我的正则表达式如下:"[a-zA-Z]+[ \t]*(?:,[ \t]*(\\d+)[ \t]*)*"

我可以与此匹配,但是我不知道如何捕获数字,我认为它必须与分组有关。

例如:如何从字符串"asd , 5 ,2,6 ,8"中捕获数字5 2 6和8?

更多示例:

sdfs6df -> no capture

fdg4dfg, 5 -> capture 5

fhhh3      ,     6,8    , 7 -> capture 6 8 and 7

asdasd1,4,2,7 -> capture 4 2 and 7

所以我可以使用这些数字继续我的工作。预先感谢。

java regex expression grouping capture
1个回答
1
投票

您可以匹配开头的字符,并利用\G定位符捕获逗号后的连续数字。

模式

(?:\w+|\G(?!^))\h*,\h*([0-9]+)

说明

  • [(?:非捕获组
  • [\w+匹配1个以上的字符字符-|
    • [\G(?!^)在上一场比赛的结尾,而不是在开始时声明位置
  • [)关闭非捕获组
  • [\h*,\h*匹配水平空白字符之间的逗号]
  • [([0-9]+)捕获组1,匹配1个以上的数字

Regex demo | Java demo

在Java中使用双转义的反斜杠:

String regex = "(?:\\w+|\\G(?!^))\\h*,\\h*([0-9]+)";

示例代码

String regex = "(?:\\w+|\\G(?!^))\\h*,\\h*([0-9]+)";
String string = "sdfs6df -> no capture\n\n"
     + "fdg4dfg, 5 -> capture 5\n\n"
     + "fhhh3      ,     6,8    , 7 -> capture 6 8 and 7\n\n"
     + "asdasd1,4,2,7 -> capture 4 2 and 7";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println(matcher.group(1));
}

输出

5
6
8
7
4
2
7
© www.soinside.com 2019 - 2024. All rights reserved.