2017-05-12 36 views
5

我想編寫一個正則表達式來獲取第一個字符和後面三位數字的多個匹配項。一些有效的例子: A123, V322, R333。 我嘗試類似的東西正則表達式在文本中多次匹配

[a-aA-Z](1)\d3 

但它得到我只是第一場比賽! enter image description here 你可能會告訴我,如何重寫這個正則表達式以獲得多個結果?非常感謝,祝你有美好的一天!

+0

你的炭類'[A-AA-Z]'將只匹配小寫'A'和大寫'A-Z'。我不確定這是你要做什麼。 – quackenator

+0

你是什麼意思_first character_?首先是什麼? – sln

+0

''[[:alpha:]] \ d {3}'[測試](https://regex101.com/r/K6rgA6/1) –

回答

4

你的正則表達式不起作用,因爲它符合:

  • [a-aA-Z] - ASCII字母,然後
  • (1) - 一個1位(並投入捕獲)
  • \d - 任何1位
  • 3 - a 3 digit。

因此,它匹配Y193E103等,即使在較長的詞組,其中YE第一字母。

你需要使用一個單詞邊界和解決您的圖案

\b[a-aA-Z][0-9]{3} 

注意:如果你需要匹配它作爲一個整體的話,在末尾添加\b\b[a-aA-Z][0-9]{3}\b

查看regex demo

詳細

  • \b - 領先的單詞邊界
  • [a-aA-Z] - ASCII字母
  • [0-9]{3} - 3位數。

C#代碼:

var results = Regex.Matches(s, @"\b[a-aA-Z][0-9]{3}") 
     .Cast<Match>() 
     .Select(m => m.Value) 
     .ToList(); 
+0

我懷疑它會幫助我們做出更好的比賽。 –

+1

問題在於OP不知道如何在regex101.com上測試正則表達式。但是,在不支持.NET regex語法的在線Web測試程序中測試.NET正則表達式幾乎沒有意義。無論如何,我還建議應該幫助的代碼。 –

+1

偉大的答案@WiktorStribiżew非常感謝你! –