2015-10-23 6 views
9

ich re.MULTILINE aber NICHTre.DOTALL, verwenden möchten, so dass ich einen regulären Ausdruck haben kann, das sowohl ein „beliebiges Zeichen“ Platzhalter und die normale . Platzhalter enthält, die doesn keine Zeilenumbrüche.für ein beliebiges Zeichen einschließlich Zeilenumbrüche in einer Python Regex subexpression, nicht global

Gibt es eine Möglichkeit, dies zu tun? Was soll ich verwenden, um ein beliebiges Zeichen in den Fällen zu finden, in die ich Zeilenumbrüche einfügen möchte?

+1

tun Sie einfach etwas wie '[\ s \ S]' oder '[\ w \ W]' –

+1

'[^ \ r \ n]' == alles andere als CR/LF –

+0

Hallo Jason, es sei denn, ich vermisse etwas, "python" + "regex" kann von den Tags impliziert werden, muss also nicht im Titel angegeben werden (gemäß der Richtlinie "no tags in titles")? – Matt

Antwort

13

Um re.S/re.DOTALL, ohne eine neue Zeile oder „ein beliebiges Symbol“ entsprechen Sie eine der folgenden Aktionen verwenden:

Leitgedanke
[\s\S] 
[\w\W] 
[\d\D] 

ist, dass die gegenüberliegenden Stenografie Klassen innerhalb einer Zeichenklasse Spiel irgendein Symbol Es gibt in der Eingabezeichenfolge.

es (.|\s) und andere Variationen mit Wechsel Vergleich ist die Zeichenklasse Lösung wesentlich effizienter, da es viel weniger Rückzieher beinhaltet (wenn sie mit einem * oder + quantifier verwendet). Vergleichen Sie das kleine Beispiel: es dauert (?:.|\n)+ 45 Schritte zu vervollständigen, und es dauert [\s\S]+ nur 2 Schritte.

+1

genial, danke! Ich wusste, dass es einen Weg gab, aber ich konnte mich nicht erinnern. –

+0

Einige Tippfehler behoben. Entschuldigung für sie. –

+0

Siehe auch Kommentar hier: https://Stackoverflow.com/a/14360754/1959808 –

Verwandte Themen