Regulären Ausdruck zu erfassen, der mehrere Zeilen
Habe ich einige text wie diesen:
Hinweis: dies ist Beispiel-text, also der Inhalt ist unwichtig
KATZE SAß AUF EINEM HUND GRUND: Kein Grund ANLIEGEN: Er war kalt WEIL: Kaltes Wetter CAT SETZTE SICH AUF EINE MAUS GRUND: Er frisst Mäuse ANLIEGEN: Er war hungrig, DENN: Dosenöffner funktionierte nicht KATZE SAß AUF EINEM PFERD GRUND: Er will zu Reiten SORGE: Er könnte fallen WEIL: Sattel ist zu groß
Bin ich zu schreiben versucht, einen regulären Ausdruck, der erfassen könnten nur die 'KATZE SAß AUF EINER der MAUS' Teil, aber ich habe Probleme die Erfassung der vollständige text.
Habe ich versucht:
(\bCAT\sSAT\Sohn\sA\sMOUSE)(.*)\n{2}
Die Idee war die Abstimmung der Anfang der Zeichenfolge, und dann, um alles zu erfassen, die bis zu zwei Zeilenumbrüche.
{2} ist das erfassen der zwei Zeilenumbrüche.
Ich habe versucht, viele weitere Varianten, aber ich Schaffe, zu tun ist, zu erfassen, die nur erste Zeile.
Jede Art von Hilfe wäre sehr geschätzt.
Vielleicht möchten schauen Sie in der multi-line-Flagge von regex vielleicht?
Was regex, welcher editor/Sprache?
Wie wäre es damit: regexr.com?2u6t0
Es funktioniert gut für mich in dotall-Modus - getestet unter gskinner.com/RegExr
Norum - Wenn die '.' enthält Zeilenumbrüche, dass regex findet alles, bis der Letzte
Was regex, welcher editor/Sprache?
Wie wäre es damit: regexr.com?2u6t0
Es funktioniert gut für mich in dotall-Modus - getestet unter gskinner.com/RegExr
Norum - Wenn die '.' enthält Zeilenumbrüche, dass regex findet alles, bis der Letzte
\n\n
. Also, wirklich doesen ' T work.InformationsquelleAutor iali | 2011-07-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wurden Sie gefragt, für alles, was dann zwei Zeilenumbrüche.
Sie brauchte zu Fragen für einen Zeilenumbruch gefolgt von irgendetwas doppelt.
Versuchen, diese:
Dieser regex match 'KATZE SAß AUF EINEM MAUS\Naber\nHere'
Um zu klären, dieser wird mit dem higlighted Teil von '
CAT SAT ON A MOUSE\nBut\nHere
\nIt\nStops'Hi danke für die Antwort. Dies funktioniert zum abholen zwei Linien, wenn ich wirklich auf der Suche, um alles zu erfassen bis zu zwei Zeilenumbrüche
InformationsquelleAutor Jacob Eggers
Ich denke, Ihr Hauptproblem ist, dass Ihr text verwendet
\r\n
auf separaten Zeilen, und du bist nur auf der Suche nach\n
. Versuchen Sie dies:(?:\r\n|[\r\n])
entspricht jedem der drei häufigsten Zeile Trennzeichen (das nenne ich Zeilenumbrüche):\r\n
,\r
oder\n
. Es entspricht genau ein Zeilenumbruch in einer Zeit, egal welche Art es ist. Dann[^\r\n]+
übernimmt, so kann es nur einen line-separator pro Zeile. Da die Absätze werden getrennt durch zwei Zeilenumbrüche, das Spiel endet dort.Ich nahm mir die Freiheit der Verankerung der ersten Zeile mit einem start-Anker (
^
) im multiline-Modus (m
). Es ist nicht absolut notwendig, das zu tun, aber hilft der regex eine übereinstimmung findet, schneller, und viel wichtiger ist, zu scheitern, mehr schnell, wenn keine übereinstimmung möglich ist.(Sie haben nicht gesagt, die regex Geschmack, mit dem Sie arbeiten, also machte ich eine wilde Vermutung und verwendet JavaScript-syntax.)
[^\r\n]+
ist gierig.Versucht, diese RegularExpression Pal (online-tool) und diese hat nicht funktioniert.. Bin ich etwas fehlt?
Ist diese regexpal.com sprechen Sie? Diese Website scheint nicht zu funktionieren bei mir, im FireFox zumindest. Aber es funktioniert gut in Chrome. Oder versuchen Sie einen anderen tester, wie eins.
InformationsquelleAutor Alan Moore
Welcher Sprache sind Sie mit der Zusammenarbeit? Das wird ein wenig helfen. In Perl, können Sie die
m
Planer zur Behandlung der multi-gefüttert-Zeichenfolge als ein einzelnes Stück text:In Perl, indem die
s
am Ende behandelt die Eingabe-Zeichenfolge als eine einzige Zeile.Okay. Ich sehe jetzt. Ich war verwirrt durch das, was er sagte, "Die Idee war die Abstimmung der Anfang der Zeichenfolge und dann auf erfassen Sie alles bis zu zwei Zeilenumbrüche." Werde ich ändern mein Programm.
David W - Dennoch denke ich, er soll aufhören, auf den ersten doppelten Zeilenumbruch. Also
/.*\n\n/s
passen alles bis zu den 'letzten' doppelten Zeilenumbruch, einschließlich 2 oder mehr aufeinander folgende Zeilenumbrüche in zwischen.Vielen Dank für diese. Bin mit javascript regexp.
InformationsquelleAutor David W.
Dies funktionieren könnte:
(\bCAT[^\S\n]SAT[^\S\n]ON[^\S\n]A[^\S\n]MOUSE\b[\s\S]*?)\n{2}
oder
(\bCAT[^\S\n]+SAT[^\S\n]+ON[^\S\n]+A[^\S\n]+MOUSE\b[\s\S]*?)\n{2}
Bearbeiten - regex muss verlangsamt werden, nachdem der erste Anker, sonst ist der nächste Anker
könnte weitergegeben werden, zu Gunsten der Geschwindigkeit. Diese kann getan werden, mit ein nicht gieriger Quantifizierer
oder ein look-ahead assertion (wodurch aggressives Verhalten auf Kosten einer check
grundsätzlich hebt seine Geschwindigkeit).
Edit2 - Manchmal kann es wünschenswert sein, die übereinstimmung mit einer 'scheinbaren' Abstand zwischen die Absätze könnten auch nicht-Zeilenumbruch-Leerzeichen.
Beispielsweise
\n\n
wird nicht mit einer offensichtlichen Lücke wie diese:"start ... \nend Absatz\n \n', wenn es sollte.
In diesem Fall, ersetzen
\n{2}
mit\n[^\S\n]*\n
wird es ermöglichen, zu entsprechen.Darüber hinaus, da die nicht-gierige Quantifizierer verwendet wird (in diesem Fall)
\b[\s\S]*?
,es ist möglich, den account und Spiel das Absatz-Ende, wenn es an oder in der Nähe des Ende der Datei. Umsetzung dieses alle zusammen, yeilds:
/(\bCAT\s+SAT\s+ON\s+A\s+MOUSE\b[\s\S]*?)($|\n[^\S\n]*\n)/
die sieht jetzt ziemlich kompliziert, aber macht der job.
InformationsquelleAutor sln