代码之家  ›  专栏  ›  技术社区  ›  Sira Lam

我可以引用Regex捕获组中的一个数字,对其进行操作,然后将其替换回来吗?

  •  0
  • Sira Lam  · 技术社区  · 5 年前

    Hello I am 'v0' to be added

    我想把它改成

    Hello I am 'v1' to be added

    所以我想替换 'v0'

    re.sub(r'(\W)v\d+(\W)', r'\1vnew\2', string)

    现在我明白了

    Hello I am 'vnew' to be added

    但我不知道怎么操作这里的数字。

    显然 re.sub(r'(\W)v(\d+)(\W)', rf'\1v{int(\2)+1}\3', string) 不起作用,因为 SyntaxError: f-string expression part cannot include a backslash .

    任何想法,除了在单独的步骤中做这些,即捕获数字,添加它并在做之前将其更改为字符串 re.sub()

    1 回复  |  直到 5 年前
        1
  •  2
  •   Nick SamSmith1986    5 年前

    可以使用lambda函数替换该值来增加匹配的数字。注意,还可以通过使用lookarounds来简化代码,以避免与 v :

    import re
    
    s = 'Hello I am \'v0\' to be added'
    s = re.sub(r'(?<=\Wv)\d+(?=\W)', lambda m: str(int(m.group(0)) + 1), s)
    print(s)
    

    Hello I am 'v1' to be added