2013-03-21 78 views
1

我想創建正則表達式以完全匹配一個字符串格式。 的字符串會是這樣正則表達式整數在單詞沒有正常失敗

 
A3476,TextA 
B5628,TextB 
A9871,TextC 

第一個字符應爲「A」或「B」,它會跟這應該是長度正好4字符和後跟「」整數。 只有逗號後三個單詞將重複那些是'TextA'或'TextB'或'TextB'。

我已經試過這個表達式

 
(A|B)(\d{4})(,)(TextA|TextB|TextC) 

當我添加任何字母的整數或整數數大於4個字符長度的字符串匹配應該失敗,但它不是失敗。

假設如果字符串是喜歡這樣7876,TextA這個

 
A653k7876,TextA 

我得到的結果。結果是缺少字符'A'並從結尾讀取整數。我的意圖是失敗。

回答

0

用途:

\b(A|B)(\d{4}),(TextA|TextB|TextC)\b 

\ b表示單詞邊界

您可能會發現此鏈接有用:C# Regex Cheat Sheet

1

你的正則表達式是很好,除了你應該指明它應該開始,以比賽結束。 ^特殊字符表示行或字符串的開始,並且$結束。所以,試試這個來代替:

^(A|B)(\d{4})(,)(TextA|TextB|TextC)$ 

確保在創建Regex對象,使這項工作時指定RegexOptions.Multiline

+0

感謝它解決了。我正在嘗試單線選項,沒有'^'符號。 – PSR 2013-03-21 10:29:55

0

看起來我們需要更多的信息,因爲如果我使用完全按照您提供的字符串,他們很好地工作:

Console.WriteLine(Regex.IsMatch(@"A653k7876,TextA", @"(A|B)(\d{4})(,)(TextA|TextB|TextC)")); 

輸出錯誤 - 你想要的。