python - re.sub 仅适用于捕获组

标签 python regex

给定字符串:

s = '<Operation dedupeMode="normal" name="update">'

我想将重复数据删除模式更改为手动。例如,最终结果应该是:

s = '<Operation dedupeMode="manual" name="update">'

是否有办法使用 re.sub 只替换捕获的组而不替换其他内容?这是我到目前为止所拥有的,但它取代了所有内容,而不仅仅是捕获的组:

import re
s = '''<Operation dedupMode="normal" name="update">'''
re.sub(r'dedupMode="(normal|accept|manual|review)"', "manual", s)
# '<Operation manual name="update">'

最佳答案

您可以切换捕获组来捕获 dedupMode="和结尾的 "

(dedupMode=")(?:normal|accept|manual|review)(")

并替换为

\1manual\2

Regex demo | Python demo

或者也许使用环视

(?<=dedupMode=")(?:normal|accept|manual|review)(?=")

并替换为

manual

Regex demo | Python demo

对于选项,您可以使用非捕获组(?:

请注意manual 也存在于替换中,可能会被省略,因为它与替换值相同。

关于python - re.sub 仅适用于捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59256253/

相关文章:

python - 在python中的闭包中调用函数

Python将源自一个模块的对象从另一个模块导入第三个模块

javascript - 下面的 javascript 表达式是什么意思

html - 修改现有正则表达式以检索索引

regex - R + 将整数转换为 hh :mm format using regex + gsub

regex - 如果遇到其他多个节标题中的任何一个,如何退出Sed中的节模式匹配?

python - Python 中的类错误

python - apscheduler 不能正常工作

exception - 返回 Exception 实例而不是在 Python 中引发它有什么缺点?

regex - 数组中的ElasticSearch Regexp