python - 为什么 re.sub 替换整个模式,而不仅仅是其中的一个捕获组?

标签 python regex python-3.x replace capturing-group

re.sub('a(b)','d','abc') yield dc ,不是 adc .

为什么re.sub替换整个捕获组,而不仅仅是捕获组'(b)'?

最佳答案

因为它应该替换整个模式的出现:

Return the string obtained by replacing the leftmost non-overlapping occurrences of the pattern in string by the replacement repl.



如果它只替换某些子组,那么包含多个组的复杂正则表达式将不起作用。有几种可能的解决方案:
  • 完整指定模式:re.sub('ab', 'ad', 'abc') - 我最喜欢的,因为它非常易读和明确。
  • 捕获要保留的组,然后在模式中引用它们(注意它应该是原始字符串以避免转义):re.sub('(a)b', r'\1d', 'abc')
  • 与上一个选项类似:提供一个回调函数为 repl参数并使其处理 Match对象并返回所需的结果。
  • 使用lookbehinds/lookaheds,它们不包含在匹配中,但会影响匹配:re.sub('(?<=a)b', r'd', 'abxb') yield adxb . ?<=在组的开头说“这是一个前瞻”。
  • 关于python - 为什么 re.sub 替换整个模式,而不仅仅是其中的一个捕获组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42104540/

    相关文章:

    python - 翻译 'Django-Oscar'

    c# - 仅获取正则表达式中组中最长的匹配项

    c# - 在 C# 中提取字符串末尾的数字

    python - 如何按给定值反转列表?

    javascript - 登录 JavaScript 登录表单请求

    python - 如何使用scipy.optimize同时最小化多个标量值函数

    python canvas.find_overlapping 似乎有倒置的 y 轴

    python - 与两个 numpy 数组相交并对其进行排序的索引

    python - 如何选择二维数组中的特定行和列

    python - 当存在重叠索引时,使用 re.findall 提取正则表达式匹配周围的单词