Python 正则表达式替换字符
天蓬老师
天蓬老师 2017-04-17 15:27:44
[Python讨论组]
python a="32<2>fdssa</2>ffdsa32"
 re.sub(r'<(\d+)>|</(\d+)>',"item",a)
result:'32itemfdssaitemffdsa32'

如何正确替换得到结果:
a="32<item>fdssa</item>ffdsa32"

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(5)
PHP中文网

这样?

>> re.sub(r'<\d+>([^<]+)</\d+>', r'<item>\1</item>', '32<2>fdssa</2>ffdsa32')
'32<item>fdssa</item>ffdsa32'
PHP中文网

re.sub(r'((?<=<)|(?<=</))\d+','item',a)

或者

re.sub(r'((?<=<)|(?<=</))\w+','item',a)

迷茫

由于look-behind requires fixed-width pattern,就是这个(?<=<|\/)无法写成(?<=<|<\/)这个形式。
所以,下面的只能凑合着用

re.sub(r'(?<=<|/)\d+(?=>)',"item",a)

下面的答案给了我提示:

re.sub(r'(<\s*\/?\s*)\d+(\s*>)', r'\1item\2', a)

ringa_lee

美女,给你两个解法

第一个是用non-greedy match:

In [1]: re.sub(r'<(/?)\d+>+?',"<\g<1>item>","32<2>fdssa</2>ffdsa32")
Out[1]: '32<item>fdssa</item>ffdsa32'

另外一个是传个函数进去:

def repl(match):
    if match.group(1):
        return "<item>"
    elif match.group(2):
        return "</item>"
    else:
        return ""

re.sub(r'(<\d+>)+?|(</\d+>)+?',repl,"32<2>fdssa</2>ffdsa32")
==>'32<item>fdssa</item>ffdsa32'
PHP中文网
import re
a="32<2>fdssa</2>ffdsa32"
re.sub(r'<\d+?>(.+?)</\d+?>', r'<item>\1</item>', a)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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