我希望匹配“100”,“1.1”,“5.404”之类的数字,如果它们之前没有包含这样的字母:“V102”。
这是我目前的正则表达式:
(?<![A-Za-z])[0-9.]+
这应该匹配任何字符0-9。如果没有前缀(A-Za-z),则重复一次或多次。
但是它的作用是匹配V102,如02,所以它只是将V和另外一个字母切掉,然后其余部分完全匹配,而它实际上根本不应该匹配那个案例。我怎样才能抓住所有数字,然后检查前缀是否不存在?
答案 0 :(得分:7)
将数字和小数点添加到负面的lookbehind:
(?<![A-Za-z0-9.])[0-9.]+
这将强制所有匹配以非数字和非字母(即空格或其他分隔符)开头。这样,数字的结尾也不是有效的匹配。
答案 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.]+$