将一系列可变长度的点分隔数字与正则表达式匹配

时间:2014-07-04 10:04:51

标签: java regex

我正在使用Java解析Excel电子表格中的文本。

我需要验证文本中是否存在3个整数的序列。

整数序列是:

  • 逗号分隔
  • 在外面划出空格

序列中的整数可以有1位或2位数。

这是我的尝试:

*((\d|\d\d)[^\w](\d|\d\d)[^\w](\d|\d\d))*

*表示我之前可以包含字符,[\ d | \ d \ d]是一个或两个数字的数字,而[^ \ w]是非单词字符?

  • 有效文字:CPI WEIGHTS 05.1.2 : CARPETS & OTHER FLOOR COVERINGS
  • 文字无效:CPIH INDEX 05.2 : HOUSEHOLD TEXTILES 2005=100

1 个答案:

答案 0 :(得分:2)

你的上一条评论实际上澄清了这个问题。

假设您正在寻找以空格分隔的1位或2位数字的点分隔序列,以下是一个示例:

String ok = "CPI WEIGHTS 05.1.2 : CARPETS & OTHER FLOOR COVERINGS";
String notOk = "CPIH INDEX 05.2 : HOUSEHOLD TEXTILES 2005=100";
Pattern p = Pattern.compile("(\\d{1,2}(\\.|\\s)){3}");
Matcher m = p.matcher(ok);
while (m.find()) {
    System.out.printf("Found: %s%n", m.group());
}
m = p.matcher(notOk);
while (m.find()) {
    System.out.printf("Found: %s%n", m.group());
}

<强>输出

Found: 05.1.2