搜索

首页  >  问答  >  正文

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

<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>
PHP中文网PHP中文网2889 天前426

全部回复(2)我来回复

  • 巴扎黑

    巴扎黑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)

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:18:45

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

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

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

    <aaa>

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

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

    然后匹配

    ['"]

    替换为

    aaa

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

    class="(.*?)"

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

    回复
    0
  • 取消回复