gpt4 book ai didi

python - 可变长度替换为 `re.sub()`

转载 作者:太空狗 更新时间:2023-10-30 02:01:28 24 4
gpt4 key购买 nike

我想用相等数量的“-”替换所有出现的 3 个或更多个“=”。

def f(a, b):
'''
Example
=======
>>> from x import y
'''
return a == b

成为

def f(a, b):
'''
Example
-------
>>> from x import y
'''
return a == b # don't touch

我的工作但 hacky 解决方案是从 re.sub() 传递一个 lambda 到 repl,它获取每个匹配的长度:

>>> import re

>>> s = """
... def f(a, b):
... '''
... Example
... =======
... >>> from x import y
... '''
... return a == b"""

>>> eq = r'(={3,})'
>>> print(re.sub(eq, lambda x: '-' * (x.end() - x.start()), s))

def f(a, b):
'''
Example
-------
>>> from x import y
'''
return a == b

我可以在不需要将函数传递给 re.sub() 的情况下执行此操作吗?

我的想法是我需要 r'(=){3,}'(一个可变长度的捕获组),但是 re.sub(r'(= ){3,}', '-', s) 我认为存在贪婪问题。

我可以修改上面的正则表达式 eq 以便不需要 lambda 吗?

最佳答案

在 lookahead/lookbehind 的帮助下,可以用 char 替换:

>>> re.sub("(=(?===)|(?<===)=|(?<==)=(?==))", "-", "=== == ======= asdlkfj")
... '--- == ------- asdlkfj'

关于python - 可变长度替换为 `re.sub()`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49468784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com