首页 > Python正则替换所有标签内的引号

Python正则替换所有标签内的引号

<div class="red" id='123' onclick="do()">
  <h1>"哈哈"</h1>
  <a href="1" title="123"></a>
</div>

比如这段代码,我想替换所有标签<>内的双引号以及单引号为"aaa",而其他地方的引号不受影响该怎么写

<div class=aaaredaaa id=aaa123aaa onclick=aaado()aaa>
  <h1>"哈哈"</h1>
  <a href=aaa1aaa title=aaa123aaa></a>
</div>

先匹配外层的 ‘<....>',再匹配内部的 ' 和 ":

import re

ss = '''
<div class="red" id='123' onclick="do()">
  <h1>"哈哈"</h1>
  <a href="1" title="123"></a>
</div>
'''

def quoterepl(matchobj):
    pattern = re.compile('\'|"')
    return pattern.sub('aaa', matchobj.group(0))

print re.sub('<[^<>]+?>', quoterepl, ss)

更新,明白题主的意思了,原来误解为把引号内部的东西替换,现在才明白是要把引号本身替换掉。

<([^<>]*)['"]([^<>]*)>

因为我们只改引号,其他地方不变,所以我们其实不是要捕获引号而是要捕获引号之外的东西,然后替换为

<\1aaa\2>

这样就把引号替换为了aaa,要注意这里一次替换只能替换一个引号。我建议先匹配出<标签内的东西

<([^<>]*=[^<>]*)>

然后匹配

['"]

替换为

aaa

——以下是错误的原答案——
举一个为例

class="(.*?)"

解释起来就是class=后面加双引号加尽可能少的字符直到另一个双引号

【热门文章】
【热门文章】