Heim > Fragen und Antworten > Hauptteil
<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
更新,明白题主的意思了,原来误解为把引号内部的东西替换,现在才明白是要把引号本身替换掉。
<([^<>]*)['"]([^<>]*)>
因为我们只改引号,其他地方不变,所以我们其实不是要捕获引号而是要捕获引号之外的东西,然后替换为
<\1aaa\2>
这样就把引号替换为了aaa,要注意这里一次替换只能替换一个引号。我建议先匹配出<标签内的东西
<([^<>]*=[^<>]*)>
然后匹配
['"]
替换为
aaa
——以下是错误的原答案——
举一个为例
class="(.*?)"
解释起来就是class=后面加双引号加尽可能少的字符直到另一个双引号