2016-04-27 10 views
2

Von dem, was ich gelesen habe, möchte ich bestimmte Wörter erfassen, die ich Wortgrenzen verwenden könnte.Regex Wortgrenze Verwirrung

Ich habe folgende Informationen

First: 12345Z Apr 16 Something WORD: ABC Notification #1234 Key1 Key2 Key3 Key4 
Second: 12345Z Apr 16 Something WORD: ABC Notification #1234 Key5 Key3 Key6 
Third: 12345Z Apr 16 Something WORD: ABC Notification #1234 Key7 Key6 

ich die folgende regex verwendet und es wird Key7 nur entsprechen, wenn ich Key3 Key4 Key6 Key7

(?<=#\d{4}\s)(\b(Key3|Key4|Key6|Key7)\b) 
+1

was Sie keine Schlüssel entsprechen, werden zu tun, wenn es folgt nur nicht nach '# 1234' – rock321987

+0

Dank für das Update Ich habe gerade bemerkt, wie gut, dass. Danke für die Post – JeremyA1

Antwort

1

Die Probleme ist, dass Ihr Regex Lassen Sie nichts zwischen den +4 Ziffern und den Schlüsseln, an denen Sie interessiert sind. Sie können es leicht beheben, indem Sie dem Lookbehind ein optionales (?:\s+\w+)* Muster hinzufügen, das null oder mehr Sequenzen von 1+ Leerzeichen und 1 + Wortzeichen entspricht:

(?<=#\d{4}(?:\s+\w+)*)\s*\b(Key3|Key4|Key6|Key7)\b 
      ^^^^^^^^^^^ 

Siehe regex demo, deklarieren Sie mit dem Verbatim String-Literal in C# (oder verwenden Sie wie in VB.NET) und verwenden Sie Regex.Matches.

A C# demo:

var strs = new List<string> { "First: 12345Z Apr 16 Something WORD: ABC Notification #1234 Key1 Key2 Key3 Key4", 
"Second: 12345Z Apr 16 Something WORD: ABC Notification #1234 Key5 Key3 Key6", 
"Third: 12345Z Apr 16 Something WORD: ABC Notification #1234 Key7 Key6"}; 
foreach (var s in strs) { 
    var result = Regex.Matches(s, @"(?<=#\d{4}(?:\s+\w+)*)\s*\b(Key3|Key4|Key6|Key7)\b") 
     .Cast<Match>() 
     .Select(m => m.Value) 
     .ToList(); 
    foreach (var e in result) 
     Console.WriteLine(e); 
} 
1

Versuchen Sie, diese

(?:#\d{4}|\G)\s(\b(?:Key3|Key4|Key6|Key7)\b) 

Regex demo übereinstimmen müssen

oder diese

(?:#\d{4}|\G) \b(?:(Key3|Key4|Key6|Key7)|\w+)\b 

Regex demo

Erläuterung:
(?: …): Nicht-Erfassung Gruppe sample
\: Escapes Sonderzeichen sample
|: Makeln/OR Operand sample
\G: Anfang String oder Ende Zurück Spiel sample
\s: "Leerzeichen": Leerzeichen, Tabulator, Newline, Wagenrücklauf, vertikale Registerkarte sample
(…): Capturing Gruppe sample