我想匹配像「100」,「1.1」,「5.404」這樣的數字,如果它們沒有在前面包括像這樣的字母:「V102」。正則表達式匹配前面沒有字母的數字
這裏是我當前的正則表達式:
(?<![A-Za-z])[0-9.]+
據說這是爲了匹配任何字符0-9。一個或多個重複,如果前綴不存在(A-Za-z)。
但是它所做的與V102相匹配,因爲它只是將V和另一個字母切掉,然後其餘部分適合,而實際上它不應該匹配那種情況。我怎樣才能讓它抓住所有數字,然後檢查前綴是否不存在?
我想匹配像「100」,「1.1」,「5.404」這樣的數字,如果它們沒有在前面包括像這樣的字母:「V102」。正則表達式匹配前面沒有字母的數字
這裏是我當前的正則表達式:
(?<![A-Za-z])[0-9.]+
據說這是爲了匹配任何字符0-9。一個或多個重複,如果前綴不存在(A-Za-z)。
但是它所做的與V102相匹配,因爲它只是將V和另一個字母切掉,然後其餘部分適合,而實際上它不應該匹配那種情況。我怎樣才能讓它抓住所有數字,然後檢查前綴是否不存在?
添加數字和小數點到您的負回顧後:
(?<![A-Za-z0-9.])[0-9.]+
這將迫使所有比賽開始一個非數字和非字母(即空格或其他分隔符)。這樣數字的結尾也不會是有效的匹配。
This Works thanks ! – user1594138
嘗試使用插入符號^
運算符。這個操作符表示你希望你的模式從輸入的開始處開始。例如,^[0-9.]+
將匹配以數字或.
開頭並具有任意數量的輸入。 請注意,此圖案不僅僅與數字相匹配,因爲它也與具有多於1個點的圖案匹配,例如2.00.2
,這不是有效的數字。
嘗試正則表達式:
(?<![A-Za-z0-9])[0-9.]+
This Works thanks,mellamokb幾秒前提交了幾乎完全相同的東西。所以我會選擇他。 – user1594138
您在負向lookbehind中也需要小數點,否則它會在'F1.00'中錯誤地匹配'.00'(例如:http://www.rubular.com/r/jGdtWa5k2a) – mellamokb
@mellamokb好點,錯過了。你已經接受了答案。 – Barmar
如果你不想字母或空格在字符串中的任何地方,那麼這應該工作:
^[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();
他只說拒絕帶字母前綴的數字。該解決方案將拒絕帶有任何非數字前綴的數字。 – Barmar
你實際上意味着以匹配輸入中_inputs_或令牌?答案高度依賴於此。例如,在「A 922」中,你的意思是匹配「922」還是一無所有? – fge
擺脫反斜槓。 – Barmar
匹配輸入內的令牌,我猜。它可以是一串隨機的東西,它應該匹配在它前面沒有包含字母的所有數字。 – user1594138