2017-05-29 7 views
1

Ich habe diesen Code:re.M nicht funktioniert für meinen Code

import re 

s = """line1 
    line2""" 

print(re.sub("^", "=", s, re.M)) 

und Ausgabe lautet:

=line1 
    line2 

heißt reg. Der Ausdruck "^" findet nur den Anfang der Zeichenfolge, nicht den Anfang der Zeilen, wie in der Dokumentation angegeben. Ich weiß, dass der Fehler in meinem Code ist, aber wo?

Genneraly Ich muss alle führenden Leerzeichen jeder Zeile in der Zeichenfolge ersetzen.

Vielen Dank!

+0

Der Python ist "Python 3.6.0 (v3.6.0: 41df79263a11, 23. Dezember 2016, 08.06.12) [MSC v.1900 64 Bit (AMD64)] auf win32" – Serge

Antwort

1

Das liegt daran, dass Sie den Parameter flags als Position übergeben. Versuchen:

print(re.sub("^", "=", s, flags=re.M)) 

tun, was Sie re.M-count Parameter übergeben hat. Flags ist nach count. Bessere Verwendung von Keywords in diesem Fall.

Mit dieser Lösung, die ich erhalten:

=line1 
= line2 
1

In Ihrem Beispiel Sie re.M als viertes Argument zu re.sub, sind vorbei, die erlaubt die Gesamtzahl der Ersetzungen ist. Nun ist es so, dass re.M ist eine numerische Konstante 8, so dass Ihr Code entspricht:

re.sub("^", "=", s, count=8) 

Die richtige Version re.M als Schlüsselwort Argument übergeben ist:

import re 

s = """line1 
    line2""" 

print(re.sub("^", "=", s, flags=re.M)) 
0

Sie die Flagge bewegen konnte zu re.compile um sicherzustellen, dass es nicht misunderstoody ist von re.sub:

print(re.sub(re.compile("^", re.M), "=", s)) 

Als Beispiel:

Verwandte Themen