2017-03-23 4 views
1

Ich versuche, eine Regex zu schreiben, die vor einem Match 1 Zeichen zurückgibt. Zum BeispielRegex - 1 Zeichen vor dem Match zurückgeben

:record1: Has text here with "\n" as the end of line \n 
however, there can be multiple line \n 
and I dont know how many before I get to the next record \n 
:record2: has some other date in it \n 

Mein aktueller regex zu versuchen und das Ende record1 wie folgt aussieht

(\n)(?=:record2:) 

Id gerne fangen die letzten \ n zu finden, aber so kann ich seine Position. Irgendwelche Gedanken darüber, wie man das Zeichen unmittelbar vor dem Match eines Strings aufnimmt?

+0

'* (\ n): record2:' würde die letzte erfassen '\ n 'vor dem String. Aber was meinst du mit "Position" und welches Werkzeug/welche Sprache verwendest du? –

+0

Warum teilen Sie Ihre Zeichenfolge nicht einfach mit '\ n: record:' (und entfernen Sie die Ziffer)? – antoni

+0

Im Verwenden eines proprietären Tools zum Konvertieren von Textdateien in XML. Mit diesem Tool können Sie Start- und End-Tags mithilfe von Regex-Ausdrücken definieren. Ich möchte ein End-Tag definieren, das das \ n vor identifiziert: record2: – TheUltimateHack

Antwort

0

Also, wenn Sie wollen Ihre Zeichenfolge von \n:record: (und entfernen Sie die Ziffer) nicht nur aufgespalten, die einfacher und schneller sein würde, dann, was Sie suchen, ist eine so genannte lookahead: \\n\n(?=:record\d+:).

Sie die Demo hier sehen können. https://regex101.com/r/im02XA/1

+0

Ich werde das überprüfen und aktualisieren. Vielen Dank – TheUltimateHack