[英]Regular expression Match for numeric pattern
我正在解析用戶提供的輸入,該輸入屬於諸如199-234
類的指定模式
在哪里
1
99
234
用戶只提供前幾個數字或整個字符串。 我打算解析每個組件。 我想出的正則表達式是-
Regex regex = new Regex(@"(?<first>\d)(?<second>\d{0,2})-?(?<third>\d{0,3})");
var groups = regex.Match(input);
如果我提供輸入199 ,則正則表達式模式將它們分為3組,而不是預期的2組。實際結果是
1
9
9
在這種情況下,如何確保輸入正確匹配?
嘗試第三組的非貪婪版本: \\d{0,3}?
Regex regex = new Regex(@"(?<first>\d)(?<second>\d{0,2})-?(?<third>\d{0,3}?)");
var groups = regex.Match(input);
(為清楚起見)它也可能有助於綁定字符串的開頭和結尾( ^
和$
)
new Regex(@"^(?<first>\d)(?<second>\d{0,2})-?(?<third>\d{0,3}?)$");
由於您的表達式需要第三個元素,因此不能將199作為兩個組進行匹配,因為匹配需要三個組。
另外,您允許第二組和第三組的長度為零的匹配。
嘗試為第二組要求兩個字符,或者使第三組為可選字符。
將完整的最后一部分設為可選,而不僅僅是-
@"(?<first>\d)(?<second>\d{0,2})(?:-(?<third>\d{0,3}))?"
我將以-
開頭的完整的最后一部分放入一個可選的非捕獲( (?:)
)組(?:-(?<third>\\d{0,3}))?
。 因此,如果有-
,它將僅搜索第三組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.