2016-06-03 6 views
0

Ich möchte wissen, ob es ein Werkzeug gibt, das eine Regex-Suche über großen Text (xml oder getaggt oder html) und ersetzen nur die Fälle, die ausgewählt sind über die angezeigte (sollte '/ abwählen/Wählen Sie alle Optionen aus, während Sie den regex-Befehl anwenden.Regex und ersetzen nur ausgewählte Ergebnisse

Wie das folgende Beispiel:

Mein Gehalt ist:

"Visited xtreme.com, stupid.net, childish.com, happy.net and innocence.edu. There are some cross.network isssues that are to be fixed." 

Jetzt in diesem Inhalt, ich will mit „.com“ alle „.net“ Vorkommen ersetzen und so ein einfaches Werkzeug, wie Notepad ++ würde es leicht ersetzen. Aber ich möchte, dass das Tool die Suchergebnisse anzeigt und die Option gibt, nur die ersten beiden Vorkommen von ".net" und nicht die Instanz in "cross.network" zu ersetzen

Dies ist nur ein Beispiel und schlägt nicht vor ein alternativer Regex. Ich brauche es nicht.

+0

Sie können eine Wortgrenze '\ .net \ b' verwenden, um nur diejenigen auszuwählen/zu ersetzen, die keine Wortzeichen am Ende haben, indem Sie regex verwenden. Weiß nicht, ob es * erste zwei * in np ++ gibt, aber Sie können einfach auf "Weitersuchen" klicken und auf "Ersetzen" klicken, wenn diese Übereinstimmung ersetzt werden soll. –

+0

Das obige Beispiel dient nur zum Verständnis. Ich brauche keinen alternativen Regex. NP ++ ist gut mit "Find Next" Option, aber es ist nicht ausreichend mit riesigen Daten mit mehr als 1000 Vorkommen. –

+0

können Sie die Tools wie AstroGrep und DocFetcher ausprobieren –

Antwort

1

NP ++ oder Sublime sind alle in Ordnung, solange sie den gesamten Text im Speicher lesen können. Beide unterstützen Regex zum Suchen und Ersetzen von Text. Wenn die Textdateien zu groß sind, d. H. NP ++ abstürzt, können Sie sed verwenden. Es ist ein Kommandozeilen-Tool, das Text wie folgt ersetzen:

sed -i filename.txt 's/pattern/replacement/g' 

Auf Windows-Boxen Sie benötigen mingw oder cygwin um es auszuführen.

1

einen Texteditor wie sublime verwenden und eine Wortgrenze auf den regulären Ausdruck gilt:

\.net\b 

Diese .net in stupid.net aber nicht in cross.network finden.
Siehe a demo on regex101.com.