python re.sub 组:\number 之后的数字
- 2025-01-07 08:44:00
- admin 原创
- 124
问题描述:
我该如何foobar
替换foo123bar
?
这不起作用:
>>> re.sub(r'(foo)', r'J3', 'foobar')
'J3bar'
这有效:
>>> re.sub(r'(foo)', r'hi', 'foobar')
'foohibar'
解决方案 1:
答案是:
re.sub(r'(foo)', r'g<1>123', 'foobar')
文档的相关摘录:
除了如上所述的字符转义和反向引用之外,还将使用由语法定义的
g<name>
名为 的组匹配的子字符串。使用相应的组号;因此相当于,但在替换中不会产生歧义,例如。将被解释为对组 20 的引用,而不是对后跟文字字符 的组 2 的引用。反向引用替换 RE 匹配的整个子字符串。name
`(?P<name>...)g<number>
g<2>g<2>0
'0'
`g<0>
解决方案 2:
对于这个问题,我更愿意通过以下方法进行匹配但不捕获。
re.sub(r'(?<=foo)', r'123', 'foobar')
#=> 'foo123bar'
它将 之后的零宽度字符串'foo'
(想想'foo'
和之间'bar'
)替换为'123'
。(?<=foo)
是一个正向后视。
演示
当然也存在需要捕获组的情况,例如
re.sub(r'(fw*o)', r'g<1>123', 'foobar')
这里
re.sub(r'(?<=fw*o)', r'123', 'foobar')
不起作用,因为 Python 的默认正则表达式引擎不支持可变长度后视(但是替代的PyPI 正则表达式模块支持)。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD