2016-08-12 1 views
0

Wir erhalten täglich eine Datei mit Tausenden von Datenzeilen. Gelegentlich werden einige Zeilen durcheinander gebracht, wodurch ein automatisierter Prozess fehlschlägt. Wenn dies geschieht, kann es schwierig sein, die Fehler zu finden.regex - Finden Sie alle Zeichenfolgen, die nicht mit einem Muster übereinstimmen

Ich möchte einen regulären Ausdruck verwenden, um etwas zu finden, das nicht mit der üblichen Dateistruktur übereinstimmt. Alle Linien sollen wie die folgende aussehen:

ABC|SomeText|MoreText 
DEF|SomeText|MoreText 
ABC|SomeText|MoreText 
GHI|SomeText|MoreText 
DEF|SomeText|MoreText 

So eine Regex, die Flaggen Linien, die mit 3 Buchstaben und einem pipebar nicht beginnen. Im folgende Beispiel wäre es Flag Linie 3.

ABC|SomeText|MoreText 
DEF|Some 
Text|MoreText 
ABC|SomeText|MoreText 
GHI|SomeText|MoreText 
DEF|SomeText|MoreText 

Jede Hilfe würde geschätzt, ich habe eine Weile mit diesem zu kämpfen.

Vielen Dank

+0

Was ist das Werkzeug/die Programmiersprache? –

+0

Notepad ++ sollte als Frage-Tag hinzugefügt werden, wenn Sie es verwenden. Notepad ++ verwendet Boost Regex-Bibliothek, es ist nicht PCRE, aber ist nahe dran. –

Antwort

1

Es wäre sehr hilfreich zu erklären, welchen Dialekt reguläre Ausdrücke Sie verwenden. wenn Sie grep zum Beispiel verwenden, können Sie nur die -v Option verwenden, um die Sinne zu invertieren und dann nur einen normalen regulären Ausdruck schreiben, etwa so:

grep -v -E '^[A-Z]{3}\|[^|]*\|' 

Andernfalls, wenn Sie nicht das Gefühl umkehren können, aber Sie haben ein System, das mit negative lookahead (wie Perl) Sie folgendes tun könnte:

grep -P '^(?![A-Z]{3}\|[^|]*\|)' 

der (?!...) Teil der negativen Look-Ahead macht. Das entspricht jeder Zeile, auf die am Anfang nicht drei Großbuchstaben, ein Balken, ein Text und dann ein weiterer Balken folgen.

+0

Danke für die schnelle Antwort Neil. Ich bin mir des Dialekts nicht sicher. Zurzeit benutze ich die Regex-Funktion von notepad ++, um die Dateien zu durchsuchen. Nicht sicher, ob das hilft. Ich werde es versuchen! – Cyan02

+0

Anscheinend verwendet Notepad ++ PCRE (Perl-kompatible reguläre Ausdrücke), so dass es die zweite mit negativem Lookahead unterstützen sollte. Viel Glück! –

+0

Sie sind ganz richtig, es war # 2 für den Sieg. Klappt wunderbar! Entschuldigung, das war meine erste Frage ... wo schalte ich das als die richtige Antwort um? – Cyan02

1

Zum Beispiel awk mit:

awk '!/^[a-zA-Z]{3}\|/' input.txt 

zeigen die 'markiert' Linien.

awk '/^[a-zA-Z]{3}\|/' in.txt 

wird die richtigen Zeilen angezeigt.

+0

Danke Wroniasty, ich werde es versuchen! – Cyan02

Verwandte Themen