簡體   English   中英

正則表達式匹配數字模式

[英]Regular expression Match for numeric pattern

我正在解析用戶提供的輸入,該輸入屬於諸如199-234類的指定模式

在哪里

  1. 第一個分量是1
  2. 第二部分是99
  3. 第三部分是234

用戶只提供前幾個數字或整個字符串。 我打算解析每個組件。 我想出的正則表達式是-

Regex regex = new Regex(@"(?<first>\d)(?<second>\d{0,2})-?(?<third>\d{0,3})");
var groups = regex.Match(input);

如果我提供輸入199 ,則正則表達式模式將它們分為3組,而不是預期的2組。實際結果是

  1. 第一個分量是1
  2. 第二部分是9
  3. 第三部分是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.

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