2017-04-04 5 views
0

Ich habe eine große Textdatei (200k Zeilen). Ich benutze Notepad ++ und ich brauche es, um die Zeilen zurückzugeben, wo dieses Wort zwischen einer bestimmten Zeichenfolge ("Zeichenfolge1") und dem ersten Vorkommen einer anderen Zeichenfolge ("") kommt. Zum Beispiel, ich suche für das Wort „myWord“ und die Textdateien wie folgt aussehen:Verwenden Sie Regex, um nach einem bestimmten Wort zwischen einer exakten Zeichenfolge und dem ersten Vorkommen einer anderen exakten Zeichenfolge zu suchen

"string1" "string 2 with myword in it" "string 3 also with myword in it" "string 4 random stuff" 
"string1" "string 2 random stuff" "string 3 also with myword in it" "string 4 random stuff" 
"string1" "string 2 with myword in it" "string 3 random stuff" "string 4 random stuff" 

Die Ergebnisse der Suche sollte Linie 1 und 3 zurück, aber nicht die Linie 2. Also dachte ich, es wie dies:

(?<="string1" ")(.*)(\bmyword\b)(.*)(?=") 

Aber das gibt auch Zeile 2, weil myWord in String 3.

ich ein noob bin, wenn es um regex kommt, das ist mein erstes Mal es mit ...

Bitte helfen Sie einfach meinen Schmerz :)

+1

Try '(? <= "String1" ") ((? :(?!" \ h + ").) *) \ Bmyword \ b ([^"] *)' –

+0

Mann, das schien zu funktionieren! Vielen Dank. –

Antwort

1

Sie können eine Lösung verwenden, die ein Muster enthalten wird, die sich auf die Spiele bis " + Raum + " - (?:(?!" ").)*:

(?<="string1" ")((?:(?!" ").)*?)\bmyword\b([^"]*) 

Einzelheiten:

  • (?<="string1" ") - ein positiver Lookbehind, der sicherstellt, dass es "string1" " Teilstrings unmittelbar links vom aktuellen Ort gibt (kann durch ersetzt werden) "string1" "\K)
  • ((?:(?!" ").)*?) - eine temperierte gierigen Token irgendeine char andere als Neue-Zeile-passenden, die nicht " " Sequenz, so wenig wie möglich (Gruppe 1)
  • \bmyword\b startet - ein ganzes Wort myword
  • ([^"]*) - Gruppe 2: any 0+ Zeichen außer ".

enter image description here

+0

Das ist großartig! Gibt es eine Möglichkeit, Notepad ++ nur "myword" markieren zu lassen und nicht die ganze Zeichenkette zwischen den 2 Grenzen? –

+0

Sie können '" string1 "" (? :(?! "").) *? \ K \ bmyword \ b' verwenden und mit * Mark * -> * Alle markieren *. –

+0

meinte ich in den Suchergebnissen , Notepad ++ markiert den gesamten String 2. Ich möchte nur "myword" hervorheben, es hilft mir visuell (ich bekomme Hunderte von Ergebnissen). –

Verwandte Themen