Java正则表达式匹配列表

时间:2018-03-07 07:39:30

标签: java regex

我有一些字符串:

  • 总计19xx.100
  • 总计19x..100
  • 总计19..100
  • 总计19x .100

我想将19与(" x"或"。"一次或多次)和100分开。 我试图使用正则表达式:

 (x|\.)+

分组,但不能匹配上面的所有情况。哪个正则表达式可以匹配上面的所有情况?

3 个答案:

答案 0 :(得分:1)

您可以使用正则表达式:

public static Matcher split(String text) {
    Pattern pattern = Pattern.compile("(\\d+)(x*)(\\s*)(\\.*)(\\d+)");
    Matcher matcher = pattern.matcher(text);
    matcher.find();

    return matcher;
}

此正则表达式适用于测试数据:

19xx.100
19x.100
19..100
19x .100

之后matcher.group(1)将返回19matcher.group(5)将返回100

答案 1 :(得分:1)

对于您的示例,您可以捕获2个捕获组中100和100之前的内容:

(\d+[x. ]+)(\d+)

<强>解释

  • 捕获群组(群组1) (
  • 匹配一个或多个数字\d+
  • 使用字符类匹配一次或多次x.或空格[x. ]+
  • 关闭捕获组)
  • (第2组)组中捕获一个或多个数字(\d+)

答案 2 :(得分:1)

您可以使用

(\d+)(\s*[x.][x.\s]*)(\d+)

请参阅regex demo

<强>详情

  • (\d+) - 第1组:一个或多个数字
  • (\s*[x.][x.\s]*) - 第2组:
    • \s* - 0+ whitespaces
    • [x.] - x.
    • [x.\s]* - 0 +字符x.或空格字符
  • (\d+) - 第3组:一个或多个数字