正则表达式用于查找句子中的数字列表

时间:2011-09-15 12:22:27

标签: java regex

我有一句话:

“包含等等等等的第1,2和5项清单。”

这也可能是这样的:

“根据第2至11项,将会有等等。”

是否有一个简单的正则表达式来获取这些数字?另外,我需要知道它是“1和5”还是“1到5”,所以我可以在必要时填写其他数字。

4 个答案:

答案 0 :(得分:1)

您可以使用正则表达式模式(?i)(\\d+)(?:(?:(?:\\s*)(,|and|through)(?:\\s*))|.*$)。以下示例代码:

final String ps = "(?i)(\\d+)(?:(?:(?:\\s*)(,|and|through)(?:\\s*))|.*$)";
final Pattern p = Pattern.compile(ps);
for (String s : new String[] {
        "A list of items 1, 2 and 5 containing blah blah blah.",
        "According to items 2 THROUGH 11 there will be blah blah."})
{
    System.out.println("***** TEST STRING *****\n" + s + "\n");
    final Matcher m = p.matcher(s);
    int cnt = 0;
    while (m.find()) {
        System.out.println(++cnt + ": G1: " + m.group(1) + " G2: "
                + m.group(2));
    }
    System.out.println("");
}

将输出:

***** TEST STRING *****
A list of items 1, 2 and 5 containing blah blah blah.

1: G1: 1 G2: ,
2: G1: 2 G2: and
3: G1: 5 G2: null

***** TEST STRING *****
According to items 2 THROUGH 11 there will be blah blah.

1: G1: 2 G2: THROUGH
2: G1: 11 G2: null

您可以使用第1组获取数字和第2组,以确定下一步的内容:,and,以便在列表through中包含下一个数字如果没有更多数字,请包含范围和null

答案 1 :(得分:0)

您可以使用“\ d +”等模式轻松地从字符串中提取所有数字,但对于“1到5”之类的短语,您需要更清晰地定义要解析的内容。

答案 2 :(得分:0)

如果您只想查找字符串

中的所有数字
public List<String> findDigits(String s) {
    String regex = "\\d+";
    Matcher m = Pattern.compile(regex).matcher(s);
    List<String> digits = new ArrayList<String>();
    while (m.find()) {
        digits.add(s.substring(m.start(), m.end()));
    }
    return digits;
}

答案 3 :(得分:0)

这样做:(\b\d+\s+through\s+\d+)|(\b\d+\s+and\s+\d+)|(\b\d+\b)

请注意,\s将匹配[ \t\n\x0B\f\r]

相关问题