<p class="red" id='123' onclick="do()">
<h1>"哈哈"</h1>
<a href="1" title="123"></a>
</p>
比如这段代码,我想替换所有标签<>内的双引号以及单引号为"aaa",而其他地方的引号不受影响该怎么写
<p class=aaaredaaa id=aaa123aaa onclick=aaado()aaa>
<h1>"哈哈"</h1>
<a href=aaa1aaa title=aaa123aaa></a>
</p>
巴扎黑2017-04-18 09:18:45
先配對外層的 ‘<....>',再配對內部的 ' 和 ":
import re
ss = '''
<p class="red" id='123' onclick="do()">
<h1>"哈哈"</h1>
<a href="1" title="123"></a>
</p>
'''
def quoterepl(matchobj):
pattern = re.compile('\'|"')
return pattern.sub('aaa', matchobj.group(0))
print re.sub('<[^<>]+?>', quoterepl, ss)
伊谢尔伦2017-04-18 09:18:45
更新,明白題主的意思了,原來誤解為把引號內部的東西替換,現在才明白是要把引號本身替換掉。
<([^<>]*)['"]([^<>]*)>
因為我們只改引號,其他地方不變,所以我們其實不是要捕捉引號而是要捕捉引號之外的東西,然後替換為
<aaa>
這樣就把引號替換為了aaa,要注意這裡一次替換只能替換一個引號。我建議先配對<標籤內的東西
<([^<>]*=[^<>]*)>
然後配對
['"]
替換為
aaa
——以下是錯誤的原答案——
舉一個為例
class="(.*?)"
解釋起來就是class=後面加雙引號加盡可能少的字符直到另一個雙引號