Python正则替换所有标签内的引号
PHP中文网
PHP中文网 2017-04-18 09:16:45
[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中文网

认证0级讲师

全部回复(2)
巴扎黑

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

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)
伊谢尔伦

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

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

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

<\1aaa\2>

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

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

然后匹配

['"]

替换为

aaa

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

class="(.*?)"

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号