3

我想匹配“100”、“1.1”、“5.404”等数字,如果它们前面不包含这样的字母:“V102”。

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

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

这应该匹配任何字符 0-9。一个或多个重复,如果前缀不存在 (A-Za-z)。

但它所做的是将 V102 匹配为 02,所以它只是去掉 V 和一个字母,然后其余的都适合,而实际上它根本不应该匹配那个大小写。我怎样才能让它抓住所有数字,然后检查前缀是否不存在?

4

6 回答 6

8

将数字和小数点添加到您的负面回顾中:

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

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

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

于 2012-12-24T17:22:07.067 回答
2

你可以使用单词边界吗?

\b[0-9\.]+\b
于 2012-12-24T17:20:02.423 回答
2

试试正则表达式:

(?<![A-Za-z0-9])[0-9.]+
于 2012-12-24T17:22:14.150 回答
1

如果您不希望字符串中的任何位置出现字母或空格,那么这应该可以:

^[0-9.]+$
于 2012-12-24T17:23:52.053 回答
1

非正则表达式解决方案。

如果您有以下字符串,那么您可以使用double.TryParse来查看该字符串是否为双精度。尝试:

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();
于 2012-12-24T17:26:03.593 回答
0

尝试使用插入符号^运算符。此运算符表示您希望您的模式从输入的开头开始。例如^[0-9.]+,将匹配以数字或 a 开头.并具有任意数量的输入。请注意,此模式不只匹配数字,因为它也匹配超过 1 个点的模式,例如2.00.2,它不是一个有效的数字。

于 2012-12-24T17:19:32.987 回答