re.sub('a(b)','d','abc')产生dc,而不是adc.

为什么re.sub会取代整个捕获组,而不仅仅是捕获组(b)?

推荐答案

因为它应该取代整个模式的出现:

返回通过替换repl替换字符串中模式的最左侧非重叠出现而获得的字符串.

如果只替换一些子组,那么包含多个组的复杂正则表达式就行不通了.有几种可能的解决方案:

  1. 完整地指定模式:re.sub('ab', 'ad', 'abc')-我最喜欢的,因为它非常可读且明确.
  2. 捕获要保留的组,然后在模式中引用它们(注意,它应该是原始字符串以避免转义):re.sub('(a)b', r'\1d', 'abc')
  3. 与前面的选项类似:提供一个回调函数作为repl参数,并使其处理Match对象并返回所需结果.
  4. 使用lookbehinds/lookahed,它们不包括在匹配中,但会影响匹配:re.sub('(?<=a)b', r'd', 'abxb')产生adxb.小组开头的?<=表示"这是一个展望".

Python-3.x相关问答推荐

将Trio与基于线程的事件侦听器混合使用

如何有效地计算Kernel/Matrix

模型中的__str__方法在Django管理面板中生成大量重复查询

Python GUI:tkinter应用程序作为Windows的实时桌面

如何在当前测试中使用fixture 转换后的数据进行参数化?

Python - 根据条件附加 NULL 值

如何将 OLS 趋势线添加到使用 updatemenus 显示数据子集的 plotly 散点图图形对象?

在 python pandas 中设置条件和分配新值

协议不支持地址系列在将 Scapy L3socket 与 WSL 一起使用时

使用 pandas 进行多类分类的总体准确度

如何准确测定cv2的结果.在BW/黑白图像中查找对象?

Python:获取未绑定的类方法

错误:预期语句,发现 py:Dedent

如何在 Python 3 中通过 IP 获取 WhoIs 信息?

全局捕获快速 api 中的异常

使用 Sublime Text 3 在 Python 3 中打印 UTF-8

带百分号的 Python 字符串格式

Selenium Python - 处理没有这样的元素异常

在 Python 中生成马尔可夫转移矩阵

交错4个相同长度的python列表