簡體   English   中英

python中的Re.sub不起作用

[英]Re.sub in python not working

假設:

s = '<A HREF="http://www.google.com" ID="test">blah</A>'

我想在URL前面加上“ url:”,所以我嘗試了:

s = re.sub(r'href="([\w:/.]+)"', "url: " + r'\1', s, re.I)

但這不會改變s

re.I位置錯誤(被解釋為count參數)。

文檔中

re.sub(pattern, repl, string, count=0, flags=0)
                              ^^^^^    ^^^^^

嘗試:

In [27]: re.sub(r'href="([\w:/.]+)"', "url: " + r'\1', s, flags=re.I)
Out[27]: '<A url: http://www.google.com ID="test">blah</A>'

盡管另一個答案在技術上絕對是正確的,但我認為您不希望在那里提到的內容。

相反,您可能想使用匹配對象:

m = re.search(r'href="([\w:/.]+)"', s, re.I)
print m.expand(r"url: \1")

導致

url: http://google.com

前面沒有<A ,后面沒有ID="test">blah</A>

(如果您想進行更多此類替換,您甚至可能希望通過編譯來重用正則表達式:

r = re.compile(r'href="([\w:/.]+)"', re.I)
ex = lambda st: r.search(st).expand(r"url: \1")
print ex('<A HREF="http://www.google.com" ID="test">blah</A>')
print ex('<A HREF="http://www.yahoo.com" ID="test">blah</A>')
# and so on.

但是,如果確實要保留HTML,則必須使用超前和后向表達式:

re.sub(r'(?<=href=")([\w:/.]+)(?=")', "url: " + r'\1', s, flags=re.I)
# -> '<A HREF="url: http://www.google.com" ID="test">blah</A>'

或簡單地通過重復省略的內容:

re.sub(r'href="([\w:/.]+)"', r'href="url: \1"', s, flags=re.I)
# -> '<A href="url: http://www.google.com" ID="test">blah</A>'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM