正则表达式 - 如何只提取整数而不是从文本中浮动

时间:2016-06-15 21:50:12

标签: java regex

给出一个文字:

Why should the number 12.8 be rounded to 13. It must be rather 11

提取的正则表达式必须是什么,仅为整数值:

13
11

我试过了:\d+(?!\\.)

但仍然没有运气。

2 个答案:

答案 0 :(得分:2)

你需要使用lookarounds(lookbehind,lookahead)来检查你匹配的数字之前和之后会发生什么:

一种天真的方法:

 public void Test8(List<int> items, int places)
    {
        int a = 0;

        if (a < items.Count)
        {
            a = a % items.Count;
        }

        int[] result = new int[items.Count];

        for (int i = 0; i < a; i++)
        {
            result[i] = items[items.Count - a + i];
        }
        int j = 0;
        for (int i = a; i < items.Count; i++)
        {
            result[i] = items[j];
            j++;
        }

一种有效的方法:

(?<![0-9]|[0-9]\.)[0-9]+(?!\.?[0-9])

(因为这个很快丢弃没有数字的位置)

注意:不要忘记转义java字符串中的反斜杠。

您也可以这样写:

[0-9](?<![0-9][0-9]|[0-9]\.[0-9])[0-9]*+(?!\.[0-9])

答案 1 :(得分:0)

我解决了应用两个正则表达式。下面的命令行显示了它们的工作原理:

echo "Why number 12.8 be rounded to 13. It must be rather 11" | grep -Po '\b\d+\.?\d\b' | grep -Po '^\d+$'

第一个正则表达式选择所有数字,包括浮点数。第二个正则表达式只选择整数。

在java 中,使用"\\b\\d+\\.?\\d\\b"选择所有数字,"^\\d+$"仅选择整数。