Ich möchte jedes Zeichen zwischen "Dies ist" und "Satz" abgleichen. Zeilenumbrüche sollten ignoriert werden. Ich kann die richtige Syntax nicht herausfinden.
Möglicherweise möchten Sie angeben, in welcher Umgebung Sie Regex verwenden. Je nachdem, was Sie unter "Ignorieren" von Zeilenumbrüchen verstehen, können Unterschiede auftreten.
Ich habe Lookbehind (?<=)und Look Ahead verwendet, (?=)damit "Dies ist" und "Satz" nicht im Spiel enthalten sind. Dies liegt jedoch an Ihrem Anwendungsfall. Sie können auch einfach schreibenThis is(.*)sentence .
Wichtig hierbei ist, dass Sie den "Dotall" -Modus Ihrer Regex-Engine aktivieren, damit die . mit der Newline übereinstimmt. Wie Sie dies tun, hängt jedoch von Ihrer Regex-Engine ab.
Das nächste ist, wenn Sie .*oder verwenden .*?. Der erste ist gierig und stimmt bis zum letzten "Satz" in Ihrer Zeichenfolge überein, der zweite ist faul und stimmt bis zum nächsten "Satz" in Ihrer Zeichenfolge überein.
@ tchrist, sorry ich musste das nachschlagen. Verstehe ich das richtig und This is(?s)(.*)sentencewürde funktionieren?
Stema
@stema: Ja, das sollte funktionieren, um den "Punkt alle" -Modus unter den meisten Regex-Bibliotheken zu aktivieren.
Tchrist
1
Das hat mein Problem größtenteils gelöst, aber wie füge ich ein Leerzeichen in mein Muster ein? Ich habe Folgendes versucht: "(. *?) ())", Um mit dem ")" am Ende einer Sequenz übereinzustimmen, aber es hat nicht funktioniert.
0xbadf00d
27
Nur eine Anmerkung - Regexr sagt jetzt, dass Lookbehind in Javascript nicht unterstützt wird
Kovo
2
Gibt es eine Möglichkeit, mit wiederholten Instanzen dieser Aufteilung in einem Textblock umzugehen? Zum Beispiel: "Dies ist nur ein einfacher Satz. Hier sind einige zusätzliche Dinge. Dies ist nur ein einfacher Satz. Und hier sind einige weitere Dinge. Dies ist nur ein einfacher Satz." Derzeit entspricht es der gesamten Zeichenfolge und nicht jeder Instanz.
Jzadra
181
Lazy Quantifier benötigt
Die Wiederbelebung dieser Frage, weil der reguläre Ausdruck in der akzeptierten Antwort mir nicht ganz richtig erscheint. Warum? weil
(?<=Thisis)(.*)(?=sentence)
passt auf my first sentence. This is my secondinThis is my first sentence. This is my second sentence.
Sie benötigen einen Lazy Quantifier zwischen den beiden Lookarounds. Das Hinzufügen von a ?macht den Stern faul.
Dies entspricht dem, was Sie wollen:
(?<=Thisis).*?(?=sentence)
Siehe Demo . Ich habe die Erfassungsgruppe entfernt, die nicht benötigt wurde.
DOTALL-Modus zur Anpassung über Zeilenumbrüche hinweg
Beachten Sie, dass in der Demo der Modus "Punkt stimmt mit Zeilenumbrüchen überein" (auch bekannt als "Punkt-Alles" eingestellt ist (siehe DOTALL in verschiedenen Sprachen aktivieren ). In vielen Regex-Varianten können Sie es mit dem Online-Modifikator festlegen (?s)und den Ausdruck in Folgendes umwandeln :
Sie haben Recht mit der Erfassungsgruppe. Ich weiß nicht, warum ich das getan habe. Der Unterschied zwischen .*und .*?wird aber auch in meiner Antwort (dem Absatz vor "Update") erklärt. Ich glaube also nicht, dass meine Antwort falsch ist.
Stema
2
@stema Tut mir leid wegen des Nitpicking, als ich gestern einige deiner Antworten durchgesehen habe, das ist das einzige, das mich zum Zucken gebracht hat. :) Ich habe die erste Zeile von is incorrectauf doesn't seem quite correct to me... aufgeweicht. Ich hoffe, das lässt dich nicht zucken, wahrscheinlich nur einen Unterschied in der Wahrnehmung darüber, wie der reguläre Ausdruck für eine so verkehrsreiche Antwort aussehen sollte.
zx81
39
Versuchen Sie This is[\s\S]*sentence, funktioniert in Javascript
Ich weiß nicht, warum alle Stimmen stimmen, dies ermöglicht 0-1 Zeilenumbrüche, und der Zeilenumbruch muss unmittelbar vorendstringname
OGHaza
Ich fand es nützlich, den Anfang von Protokollzeilen (Zeitstempel usw.) zu entfernen. Ich habe eine neue Zeile für die Anfangszeichenfolge und "at" für die Endzeichenfolge verwendet.
Stan
2
Für den Fall, dass jemand in einem Jenkins-Kontext nach einem Beispiel dafür sucht. Es analysiert das build.log und wenn es eine Übereinstimmung findet, schlägt der Build mit der Übereinstimmung fehl.
Ich bin mir nicht sicher, ob die Frage lautet, wie dies in Sublime Text gemacht werden soll, funktioniert aber meistens in Sublime Text. Es funktioniert nicht, wenn zwischen "Dies ist" und "Satz" ein Zeilenumbruch auftritt. Außerdem wählt erhabener Text auch "Dies ist" und "Satz" aus und nicht nur den Text zwischen diesen beiden Zeichenfolgen.
Dylan Kinnett
0
So habe ich es gemacht:
Das war für mich einfacher als zu versuchen, den spezifischen regulären Ausdruck herauszufinden, der notwendig ist.
Ich bin hier auf meiner Suche nach Regex gelandet, um diese Drucksyntax zwischen print "string" in Python2 in alten Skripten mit: print ("string") für Python3 zu konvertieren. Funktioniert gut, andernfalls verwenden Sie 2to3.py für zusätzliche Konvertierungen. Hier ist meine Lösung für andere:
Probieren Sie es auf Regexr.com aus (funktioniert aus irgendeinem Grund nicht in NP ++):
Antworten:
Zum Beispiel
Regexr
Ich habe Lookbehind
(?<=)
und Look Ahead verwendet,(?=)
damit "Dies ist" und "Satz" nicht im Spiel enthalten sind. Dies liegt jedoch an Ihrem Anwendungsfall. Sie können auch einfach schreibenThis is(.*)sentence
.Wichtig hierbei ist, dass Sie den "Dotall" -Modus Ihrer Regex-Engine aktivieren, damit die
.
mit der Newline übereinstimmt. Wie Sie dies tun, hängt jedoch von Ihrer Regex-Engine ab.Das nächste ist, wenn Sie
.*
oder verwenden.*?
. Der erste ist gierig und stimmt bis zum letzten "Satz" in Ihrer Zeichenfolge überein, der zweite ist faul und stimmt bis zum nächsten "Satz" in Ihrer Zeichenfolge überein.Aktualisieren
Regexr
Wo das (? S) den Dotall-Modifikator aktiviert, wird die
.
Übereinstimmung mit den Zeilenumbruchzeichen vorgenommen.Update 2:
stimmt mit Ihrem Beispiel überein "Dies ist ein (einfacher) Satz". Siehe hier auf Regexr
quelle
This is(?s)(.*)sentence
würde funktionieren?Lazy Quantifier benötigt
Die Wiederbelebung dieser Frage, weil der reguläre Ausdruck in der akzeptierten Antwort mir nicht ganz richtig erscheint. Warum? weil
passt auf
my first sentence. This is my second
inThis is my first sentence. This is my second sentence.
Siehe Demo .
Sie benötigen einen Lazy Quantifier zwischen den beiden Lookarounds. Das Hinzufügen von a
?
macht den Stern faul.Dies entspricht dem, was Sie wollen:
Siehe Demo . Ich habe die Erfassungsgruppe entfernt, die nicht benötigt wurde.
DOTALL-Modus zur Anpassung über Zeilenumbrüche hinweg
Beachten Sie, dass in der Demo der Modus "Punkt stimmt mit Zeilenumbrüchen überein" (auch bekannt als "Punkt-Alles" eingestellt ist (siehe DOTALL in verschiedenen Sprachen aktivieren ). In vielen Regex-Varianten können Sie es mit dem Online-Modifikator festlegen
(?s)
und den Ausdruck in Folgendes umwandeln :Referenz
quelle
.*
und.*?
wird aber auch in meiner Antwort (dem Absatz vor "Update") erklärt. Ich glaube also nicht, dass meine Antwort falsch ist.is incorrect
aufdoesn't seem quite correct to me
... aufgeweicht. Ich hoffe, das lässt dich nicht zucken, wahrscheinlich nur einen Unterschied in der Wahrnehmung darüber, wie der reguläre Ausdruck für eine so verkehrsreiche Antwort aussehen sollte.Versuchen Sie
This is[\s\S]*sentence
, funktioniert in Javascriptquelle
[\s\S]*?
(auch genannt: nicht gierige Wildcard)Diese:
arbeitet in Javascript.
quelle
benutze das:
(?<=beginningstringname)(.*\n?)(?=endstringname)
quelle
endstringname
Für den Fall, dass jemand in einem Jenkins-Kontext nach einem Beispiel dafür sucht. Es analysiert das build.log und wenn es eine Übereinstimmung findet, schlägt der Build mit der Übereinstimmung fehl.
quelle
Sie können dies einfach verwenden:
\This is .*? \sentence
quelle
Erhabener Text 3x
In erhabenem Text schreiben Sie einfach die beiden Wörter, die Sie behalten möchten, zum Beispiel in Ihrem Fall
"Dies ist" und "Satz"
und du schreibst. * dazwischen
dh
This is .* sentence
und das sollte dir gut tun
quelle
So habe ich es gemacht:
Das war für mich einfacher als zu versuchen, den spezifischen regulären Ausdruck herauszufinden, der notwendig ist.
quelle
Für eine schnelle Suche in VIM können Sie an der Vim Control-Eingabeaufforderung Folgendes verwenden: / Dies ist. * \ _. * Satz
quelle
Ich bin hier auf meiner Suche nach Regex gelandet, um diese Drucksyntax zwischen print "string" in Python2 in alten Skripten mit: print ("string") für Python3 zu konvertieren. Funktioniert gut, andernfalls verwenden Sie 2to3.py für zusätzliche Konvertierungen. Hier ist meine Lösung für andere:
Probieren Sie es auf Regexr.com aus (funktioniert aus irgendeinem Grund nicht in NP ++):
für Variablen:
für Label und Variable:
Wie ersetze ich alle print "string" in Python2 durch print ("string") für Python3?
quelle
Das hat bei mir funktioniert (ich verwende VS Code ):
zum:
This is just\na simple sentence
Verwenden:
This .+ sentence
quelle
RegEx, um mithilfe des Java-Ansatzes alles zwischen zwei Zeichenfolgen abzugleichen.
Verwenden wir Pattern- und Matcher-Objekte, um RegEx (. ?) * Zu verwenden .
Da Matcher möglicherweise mehr als eine Übereinstimmung enthält, müssen wir die Ergebnisse durchlaufen und speichern.
Dieses Beispiel enthält nur das Wort "speichert das" , aber im größeren Text werden wahrscheinlich mehr Übereinstimmungen gefunden.
quelle