cari

Rumah  >  Soal Jawab  >  teks badan

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 hari yang lalu422

membalas semua(2)saya akan balas

  • 巴扎黑

    巴扎黑2017-04-18 09:18:45

    Mula-mula padankan bahagian luar '<....>', kemudian padankan bahagian dalam ' dan ":

    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)

    balas
    0
  • 伊谢尔伦

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

    Kemas kini, saya faham maksud soalan pada asalnya saya salah faham sebagai menggantikan perkara di dalam tanda petikan, tetapi sekarang saya faham bahawa saya perlu menggantikan tanda petikan itu sendiri.

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

    Oleh kerana kami hanya menukar tanda petikan dan membiarkan bahagian lain tidak berubah, kami sebenarnya tidak mahu menangkap tanda petikan tetapi untuk menangkap perkara selain daripada tanda petikan dan kemudian menggantikannya dengan

    <aaa>

    Ini menggantikan tanda petikan dengan aaa Sila ambil perhatian bahawa hanya satu tanda petikan boleh diganti pada satu masa. Saya cadangkan padankan kandungan tag

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

    Kemudian padankan

    ['"]
    Gantikan

    dengan

    aaa

    ——Berikut adalah jawapan asal yang salah——
    Beri contoh

    class="(.*?)"

    Penjelasan adalah untuk menambah petikan berganda selepas kelas= dan menambah sesedikit aksara yang mungkin sehingga petikan berganda lagi

    balas
    0
  • Batalbalas