Entfernen Sie alles außer einem bestimmten Muster
Habe ich eine log-Datei mit vielen Streichern.
Ich würde gerne alles entfernen aus dieser Datei (suchen & ersetzen), mit Ausnahme der Zeichenfolge, die beginnt mit: phone=
und endete mit Digits=1
Beispiel: phone=97212345678&step=1&digits=1
Finden Sie die Zeichenfolge, ich bin mit (phone=.*digits=1)
- und es funktioniert! aber ich habe es nicht geschafft zu finden, die regex die wählen alles, aber diese Zeichenfolge und Sie alles klar.
- Was ist die Sprache/regex Geschmack? Können Sie nur so etwas wie
.*(phone=\S*?digits=1).*
und ersetzen mit$1
. - finden & ersetzen mit notepad++
- So, hat
.*(phone=\S*?digits=1).*
zu ersetzen$1
mit . entspricht newline AUF die für Sie arbeitet? - teilweise, es macht den job, aber nur in einer Zeile. Ich meine, wenn in einer bestimmten Zeile der string bereits vorhanden ist, entfernen Sie alles, was sonst
- . entspricht Zeilenumbruch ON Haben Sie diese option?
- ja. es ist jetzt alles entfernen und nur das Letzte match.
- 🙂 Lesen Sie bitte Ihre Frage. Sie fragte genau für, die. Wenn nicht, bitte aktualisieren Sie es.
- ja, es findet ein match und entfernen Sie alle der rest, aber es gibt mehr-Zeichenfolge übereinstimmen, und es bleibt nur das Letzte. Ich habe eine Beispiel-Datei. danke.
- Gut. Das bedeutet, dass Sie wird zu tun haben, dass in 2 Schritten. Ich update meine Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um zu beseitigen, was aber einen bestimmten text verwenden, benötigen Sie
.*(text_you_need_to_keep).*
mit.
passenden Zeilenumbruch.In Notepad++ zu verwenden
Finden:
.*(phone=\S*?digits=1).*
Ersetzen:
$1
HINWEIS: . entspricht newline option muss überprüft.
Benutze ich
\S*?
statt.*
innerhalb der Aufnahme-Muster, da Sie nur wollen, um entsprechend alle nicht-whitespace-Zeichen, so wenig wie möglich vonphone=
bis zum nächstendigits
..*
ist zu gierig und kann erstrecken sich über mehrere Zeilen mit DOTALL option AUF.UPDATE
Wenn Sie wollen, halten einige mehrere vorkommen eines Musters in einem text, in Notepad++, die Sie verwenden können,
Ersetzen mit
$1\n
. Mit, dass, werden Sie entfernen Sie alle unerwünschten Teilstrings, aber diejenigen, die nach dem letzten auftreten Ihre notwendigen Teilmuster.Müssen Sie entfernen Sie das Letzte Stück entweder manaully oder mit
$1
Rückverweis. Wenn das ist nicht, was Sie brauchen, zu erklären, dass in der Frage. Auch ist es eine gute Idee, um eine Probe text mit einer Beschreibung was schiefgelaufen ist beim anwenden einer bestimmten regex.Wenn Sie einige tools wie Notepad++ oder EditPlus, können Sie die folgenden regex ersetzen:
Finden string:
^phone=(\d+&step=1&)digits=1
Ersetzen-string:
\1
Regex zu finden, die passen:
Zu ersetzen, Datei Ausnahme entsprechen:
Angenommen, Sie haben Daten wie:
Sie möchten, zu extrahieren [ID = dddd] zum Teil aus tausenden von Zeilen.
In Notepad++ drücken Sie Strg+h öffnen Sie ersetzen Fenster die Option regulärer Ausdruck.
Finden, was:
Ersetzen mit:
Für Ihre spezifischen Zeichenkette, regex wäre: