正则表达式匹配数字,前面没有字母

时间:2012-12-24 17:14:24

标签: c# regex

我希望匹配“100”,“1.1”,“5.404”之类的数字,如果它们之前没有包含这样的字母:“V102”。

这是我目前的正则表达式:

(?<![A-Za-z])[0-9.]+

这应该匹配任何字符0-9。如果没有前缀(A-Za-z),则重复一次或多次。

但是它的作用是匹配V102,如02,所以它只是将V和另外一个字母切掉,然后其余部分完全匹配,而它实际上根本不应该匹配那个案例。我怎样才能抓住所有数字,然后检查前缀是否不存在?

6 个答案:

答案 0 :(得分:7)

将数字和小数点添加到负面的lookbehind:

(?<![A-Za-z0-9.])[0-9.]+

这将强制所有匹配以非数字和非字母(即空格或其他分隔符)开头。这样,数字的结尾也不是有效的匹配。

演示:http://www.rubular.com/r/EDuI2D9jnW

答案 1 :(得分:1)

你可能能够使用单词边界吗?

\b[0-9\.]+\b

答案 2 :(得分:1)

试试正则表达式:

(?<![A-Za-z0-9])[0-9.]+

答案 3 :(得分:1)

非正则表达式解决方案。

如果您有以下字符串,则可以使用double.TryParse查看该字符串是否为double。尝试:

string str = "100 1.1 V100 d333 ABC 1.1";
double temp;
string[] result = str.Split().Where(r => (double.TryParse(r, out temp))).ToArray();

或者如果你需要一个双数组作为回报:

double[] numberArray = str.Split()
                          .Where(r => double.TryParse(r, out temp))
                          .Select(r => double.Parse(r))
                          .ToArray();

答案 4 :(得分:0)

尝试使用插入符^运算符。此运算符表示您希望模式从输入的开头开始。例如,^[0-9.]+将匹配以数字或.开头且具有任意数量的输入。 请注意,此模式仅与数字不匹配,因为它还匹配多于1个点的模式,例如2.00.2,这不是有效数字。

答案 5 :(得分:0)

如果您不想在字符串中的任何位置使用字母或空格,那么这应该有效:

^[0-9.]+$