2012-04-13 4 views
1

Kann ich kombinieren diese reguläre Ausdrücke irgendwie ?:Wie können diese regulären Ausdrücke prägnanter geschrieben werden?

 _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$")); 

Antwort

2
\d+(?:st|th|nd|rd) Fl(?:r|oor)?$ 
  • Spiel mindestens eine Ziffer oder mehr, nicht Nullstellen (was wahrscheinlich ein Fehler im Original)
  • Vergessen Sie nicht st
  • Spiel Fl, Floor oder Flr
  • Verwenden Sie nicht einfangende Gruppe (?: anstelle der Erfassungsgruppe
  • Angenommen, Perl kompatibel Regex
1
[0-9]*(st|th|nd|rd) (Fl|Floor)$ 

sollte die gleiche Wirkung haben. Mit dem Operator | sagen Sie eigentlich, Sie wollen eine der Möglichkeiten.

[angenommen _regexes.Add(new Regex("[0-9]*rd Flr$")); - das r ist ein Tippfehler] ist es?

+0

Dies ist falsch. Es stimmt nicht überein, z.B. "1. Etage" oder "2. Etage". –

+0

es braucht ein Leerzeichen '\ s' ->' [0-9] * (st | th | nd | rd) \ s (Fl | Floor) $ ' – Robbie

+0

Ja, es war ein Tippfehler - ich edited und fügte es hinzu. Es braucht ein bestimmtes '' '', nicht '\ '. [das Original akzeptiert z. B. kein TAB] Danke @Robbie – amit

Verwandte Themen