[英]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.]+
這將強制所有匹配以非數字和非字母(即空格或其他分隔符)開頭。 這樣,數字的結尾也不是有效的匹配。
你可能能夠使用單詞邊界嗎?
\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.