2012-04-13 65 views
1

我可以以某種方式結合這些正則表達式?:這些正則表達式如何寫得更簡潔?

 _regexes = new List<Regex>(); 
     _regexes.Add(new Regex("[0-9]*th Fl$")); 
     _regexes.Add(new Regex("[0-9]*th Floor$")); 
     _regexes.Add(new Regex("[0-9]*st Fl$")); 
     _regexes.Add(new Regex("[0-9]*st Floor$")); 
     _regexes.Add(new Regex("[0-9]*nd Fl$")); 
     _regexes.Add(new Regex("[0-9]*nd Floor$")); 
     _regexes.Add(new Regex("[0-9]*rd Flr$")); 
     _regexes.Add(new Regex("[0-9]*rd Floor$")); 

回答

2
\d+(?:st|th|nd|rd) Fl(?:r|oor)?$ 
  • 匹配至少一個數量級以上,不爲零的數字(這可能是在原來的一個缺點)
  • 不要忘記st
  • 比賽FlFloorFlr
  • 使用非捕獲組(?:而不是捕獲組
  • 假設perl兼容正則表達式
1
[0-9]*(st|th|nd|rd) (Fl|Floor)$ 

應該有同樣的效果。使用|運營商,你實際上說你想要其中一種可能性。

[假設_regexes.Add(new Regex("[0-9]*rd Flr$")); - r是錯字]是嗎?

+0

這是錯誤的。它未能匹配,例如「一樓」或「二樓」。 – 2012-04-13 23:18:16

+0

它需要一個空格'\ s' - >'[0-9] *(st | th | nd | rd)\ s(Fl | Floor)$' – Robbie 2012-04-13 23:20:06

+0

是的,這是一個錯字 - 我編輯並添加它。它需要一個特定的'''',而不是'\ s'。 [原始不接受TAB例如]謝謝@Robbie – amit 2012-04-13 23:20:46