recherche

Maison  >  Questions et réponses  >  le corps du texte

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 Il y a quelques jours423

répondre à tous(2)je répondrai

  • 巴扎黑

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

    Faites d'abord correspondre le '<....>' extérieur, puis faites correspondre le ' et le " intérieur :

    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)

    répondre
    0
  • 伊谢尔伦

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

    Mise à jour, je comprends le sens de la question. Au départ, je l'avais mal comprise comme remplaçant les éléments entre guillemets, mais maintenant je comprends que je dois remplacer les guillemets eux-mêmes.

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

    Parce que nous avons uniquement modifié les guillemets et laissé les autres parties inchangées, nous ne voulons pas capturer les guillemets mais capturer des éléments autres que les guillemets, puis les remplacer par

    <aaa>

    Ceci remplace les guillemets par aaa. Veuillez noter qu'un seul guillemet peut être remplacé à la fois. Je suggère de faire d'abord correspondre le contenu de la balise

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

    Alors correspond

    ['"]
    Remplacez

    par

    aaa

    ——Ce qui suit est la mauvaise réponse originale——
    Donnez un exemple

    class="(.*?)"

    L'explication est d'ajouter des guillemets doubles après class= et d'ajouter le moins de caractères possible jusqu'à un autre guillemet double

    répondre
    0
  • Annulerrépondre