2016-03-31 12 views
3

Angenommen, ich habe eine Zeichenfolge 'ad>ad>ad>>ad' und ich möchte auf diese auf die '>' (nicht die '>>' Zeichen) teilen. Gerade regex abgeholt und frage mich, ob es einen Weg gibt (Sonderzeichen) auf einen bestimmten Teil des angepassten Ausdruck zu spalten, anstatt Spaltung im Großen und Ganzen abgestimmt Ausdruck, zum Beispiel könnte die regex sein:Split-String auf Teil der übereinstimmenden regulären Ausdruck (Python)

re.split('[^>]>[^>]', 'ad>ad>ad>>ad')

Können Sie es auf das Zeichen in Klammer teilen [^>](>)[^>]?

Antwort

1

Sie müssen lookarounds verwenden:

re.split(r'(?<!>)>(?!>)', 'ad>ad>ad>>ad') 

Siehe regex demo

Das (?<!>)>(?!>) Muster passt nur ein >, die nicht mit einem < (aufgrund der negativen Lookbehind (?<!>)) vorgeschaltet ist, und das ist nicht gefolgt mit einer < (aufgrund der negativen Lookahead (?!>)).

Da lookarounds nicht verbrauchen die Zeichen (im Gegensatz zu negiert (und positive Klassen) Zeichen, wie [^>]), wir nur auf einem < Symbol entsprechen und Split ohne „berühren“ die Symbole um ihn herum.

1

mit \b>\b

Versuchen für einzelne > von Nicht-Leerzeichen umgeben Dies wird überprüfen. Da die Zeichenfolge in der Frage ein kontinuierlicher Zeichenstrom ist, der die Wortgrenze mit \b überprüft, ist die einfachste Methode.

Regex101 Demo

+0

Was passiert, wenn ein einzelnes '>' wird mit Leerzeichen eingeschlossen ist, oder es ist nur ein Platz auf der rechten oder linken? Dann wird es nicht funktionieren. –

+0

@ WiktorStribiżew: Das ist nicht in OP-Spezifikation. Wenn dies der Fall ist, sollte das OP alle diese ** Fälle ** angeben. –

+0

Ich habe die andere als korrekt markiert, da sie die genaue Übereinstimmung widerspiegelt, die ich suchte (aber ohne Verbrauch, was für mich neu ist ..) – dpdenton

Verwandte Themen