搜尋

首頁  >  問答  >  主體

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 天前421

全部回覆(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
  • 取消回覆