对于 re.sub,将 vim 正则表达式转换为 python

convert vim regex to python for re.sub

我在 vim 下有一个工作正则表达式:/^ \{-}\a.*$\n

我实施全局搜索并替换为 :%s/^ \{-}\a.*$\n// 这很好用——删除所有以任意数量的空格开头的行(非贪婪匹配),然后是一个字母和行尾的任何其他内容,包括换行符。

我无法(拯救我的灵魂)找出 Python 中的类似正则表达式。以下是对我有意义的内容:

x = re.sub("^ *?\a.$\n","",y)

但这没有任何作用。

非常感谢您的睿智回复。

\a表示Python中的铃符(0x07),而$\n是多余的坏主意,所以:

x = re.sub(r"^ *[A-Za-z].*\n","",y)

此外,没有理由在这里写 ' *?' 而不是 ' *',因为如果匹配,它后面总是跟一个非 space。

如果要匹配任意数量的空格,也可以使用\s序列。

任何字母都将与 [a-zA-Z] 字符 class 匹配。您也不需要使用 $\n,两者都可以。

建议如下:

x = re.sub(r"^\s*[a-zA-Z].*(\r|\n)","",y)

如果您想要至少一个空格,请使用 \s+ 而不是 \s*