对于 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*
我在 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*