2017-05-29 46 views
1

re.M被不工作我有這樣的代碼:我的代碼

import re 

s = """line1 
    line2""" 

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

和輸出是:

=line1 
    line2 

即REG。表達式「^」僅查找字符串的開頭,而不是文檔中所述的行的開頭。我意識到錯誤是在我的代碼中,但在哪裏?

Genneraly我需要替換字符串中每行的所有前導空格。

謝謝!

+0

python是「Python 3.6.0(v3.6.0:41df79263a11,Dec 23 2016,08:06:12)[MSC v.1900 64位(AMD64)]在win32上」 – Serge

回答

1

那是因爲你傳遞了flags參數作爲位置。嘗試:

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

否則你是通過什麼re.Mcount參數。旗幟在count之後。在這種情況下最好使用關鍵字。

隨着該修補程序,我得到:

=line1 
= line2 
1

在你的榜樣,你是路過re.M作爲第四個參數來re.sub,這是換人允許的總數。恰巧,re.M是一個數字常數8,所以你的代碼就相當於:

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

正確的版本是通過re.M作爲關鍵字參數:

import re 

s = """line1 
    line2""" 

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

您可以在標誌移到re.compile以確保它不是由misunderstoody re.sub

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

爲例:

import re 

s = """line1 
    line2""" 
line_start = re.compile("^", re.M) 
print(re.sub(line_start, "=", s)) 
# =line1 
# = line2