给出一个文字:
Why should the number 12.8 be rounded to 13. It must be rather 11
提取的正则表达式必须是什么,仅为整数值:
13
11
我试过了:\d+(?!\\.)
但仍然没有运气。
答案 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+$"
仅选择整数。