Python 执行正则表达式替换的最佳方法

Python 执行正则表达式替换的最佳方法,python,regex,re,Python,Regex,Re,我有以下代码来更改提供程序“aws”块中的版本字符串。使用re.search()和re.sub()。是否可以只使用re.sub() 是的,这是可能的,当使用re.sub时,您需要使用捕获组和明确的替换反向引用,并且您需要稍微更改模式: def process(p, provider, version): return re.sub(r'(provider\s+"{}"\s+{{[\s\S]*?version\s+=\s+"~>\s*)[^"]*'.format(provider),

我有以下代码来更改
提供程序“aws”
块中的版本字符串。使用
re.search()
re.sub()
。是否可以只使用
re.sub()


是的,这是可能的,当使用
re.sub
时,您需要使用捕获组和明确的替换反向引用,并且您需要稍微更改模式:

def process(p, provider, version):
  return re.sub(r'(provider\s+"{}"\s+{{[\s\S]*?version\s+=\s+"~>\s*)[^"]*'.format(provider),
    r'\g<1>{}'.format(version),
    p)
替换为
\g2.61
。看

详细信息

  • (provider\s+“aws”\s+{[\s\s]*version\s+=\s+“~>\s*)
    -group1(
    \g
    是对组值的反向引用(注意您不能使用
    \1
    ,因为下一个字符是数字!):
    • 提供者
      -一个词
    • \s+
      -1+空格
    • “aws”
      -
      “aws”
    • \s+
      -1+空格
    • {
      -一个
      {
      字符(在格式字符串中,必须加倍)
    • [\s\s]*
      -0+字符,尽可能少
    • version
      -一个单词
      version
    • \s+=\s+
      -包含1+空格的
      =
      字符
    • “~>
      -a
      ”~>
      子字符串
    • \s*
      -0+空格
  • [^”]*
    -0+字符,而不是
def process(p, provider, version):
  return re.sub(r'(provider\s+"{}"\s+{{[\s\S]*?version\s+=\s+"~>\s*)[^"]*'.format(provider),
    r'\g<1>{}'.format(version),
    p)
(provider\s+"aws"\s+{[\s\S]*?version\s+=\s+"~>\s*)[^"]*