[英]Regex to Match only integer
正如標題所說,我正在嘗試構建一個正則表達式來從字符串中提取整數。 實際情況是,我有一個很大的代碼文件(整數)和一些值(小數)。
我可以使用[\\d]*([.,][\\d]*)
成功提取小數。 (這可能看起來很奇怪,但我也在捕獲.1或1.)。 但是我無法提取整數,直到現在我有了[\\d]*([\\d]*)[\\d]
。 我也嘗試過類似^[\\d]+$
但是沒有運氣。
我將在C#應用程序中使用此正則表達式,因此我不知道是否有任何其他“規則”適用。
Regex ex = new Regex(@"MY_REGEX", RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
這可能是重復的,但是我無法弄清楚。
有
0066 435sxxzx 23454 2 3 45 06 11.3243 sds435 adc234wer
我只想搭配
0066 23454 2 3 45 06
這是regex101中的示例
確保兩端沒有小數點分隔符並帶有環顧四周:
\b(?<!\.)\d+(?!\.)\b
C#(您似乎不需要忽略大小寫標志,因為.
和數字沒有大小寫變體):
var ex = new Regex(@"\b(?<!\.)\d+(?!\.)\b", RegexOptions.CultureInvariant);
正則表達式細分:
\\b
單詞邊界(我們要求數字前的字符為非單詞char或字符串的開頭 (?<!\\.)
-此字符不能為點 \\d+
-匹配1個以上的數字... (?!\\.)
-僅當不帶.
\\b
但必須有一個非單詞char或字符串的結尾。 對於評論來說,這太長了,但僅是一個建議:如果目標是獲取整數值本身而不是文本,則可以對每個“單詞”使用int.TryParse而不是正則表達式。 以linq格式:
string input = "0066 435sxxzx 23454 2 3 45 06 11.3243 sds435 adc234wer";
var ints = input.Split(' ')
.Select(s=> {int i; if(int.TryParse(s,out i))return i; else return (int?)null;})
.Where(i=>i.HasValue)
.ToList();
用空格分隔字符串。
例如在Java中:
String parts[] = text.split(" ");
然后,您可以使用正則表達式或將其解析為數字來檢查每個單詞是否為數字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.