簡體   English   中英

正則表達式匹配數字,前面沒有字母

[英]Regex matching numbers without letters in front of it

我希望匹配“100”,“1.1”,“5.404”之類的數字,如果它們不包含前面的字母,如下所示:“V102”。

這是我目前的正則表達式:

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

這應該匹配任何字符0-9。 如果不存在前綴(A-Za-z),則重復一次或多次。

但它的作用是匹配V102,如02,所以它只是將V和另外一個字母切掉,然后其余部分適合,而實際上根本不應該匹配那個案例。 我怎樣才能抓住所有數字,然后檢查前綴是否不存在?

在負面的lookbehind中添加數字和小數點:

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

這將強制所有匹配以非數字和非字母(即空格或其他分隔符)開頭。 這樣,數字的結尾也不是有效的匹配。

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

你可能能夠使用單詞邊界嗎?

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

試試正則表達式:

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

非正則表達式解決方案。

如果您有以下字符串,則可以使用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();

嘗試使用插入符號^運算符。 此運算符表示您希望模式從輸入的開頭開始。 例如, ^[0-9.]+將匹配以數字或a開頭的輸入. 並且有任何數量。 請注意,此模式僅與數字不匹配,因為它還匹配多於1個點的模式,例如2.00.2 ,這不是有效數字。

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

^[0-9.]+$

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM