2017-01-10 5 views
1

Ich habe einige Probleme beim Erstellen von regulären Ausdrücken in C#.Suchen Sie nach allen benannten Gruppenvorkommen in einer Zeichenfolge, beginnend mit einer anderen

Zum Beispiel, ich habe eine Reihe von Strings:

1: TestString.WrittenEspecially.ForStackOverflowStringTest 
2: TestString.WrittenEspecially.ForStackOverflowString 
3: TestString.WrittenEspecially.StringForStackOverflowStringTest 
4: TestString.WrittenStringEspecially.ForStackOverflowStringTest 

Ich möchte alle Vorkommen des Wortes "String" in den Zeilen mit Start finden: "1" oder "3".

Ich habe einen regulären Ausdruck: ^(1:|3:).*(?<str>String)+.*

Aber es findet nur letzte Vorkommen von benannten Gruppe.

Irgendwelche Ideen?

Antwort

6

Wenn Sie einen regulären Ausdruck verwenden müssen, ist es sehr einfach, mit einem mit variabler Breite von .NET Regex Lookbehind unterstützt:

(?m)(?<=^[13]:.*?)String 

Siehe regex demo

Einzelheiten:

  • (?m) - aktiviert einen mehrzeiligen Modus, so dass ^ mit dem Anfang einer übereinstimmen konnte l ine eher als eine Zeichenfolge
  • (?<=^[13]:.*?) - der positive Lookbehind erfordert das folgende Muster unmittelbar links von der aktuellen Position:
    • ^ - Anfang einer Zeile
    • [13]:-1 oder 3 und dann :
    • .*? - alle 0+ Zeichen außer einer Zeilenschaltung, so wenig wie möglich
  • String - eine literale Zeichenfolge.
Verwandte Themen