我正在尝试创建一个与以下任一匹配的 Python 正则表达式:
- 字符串的开头
- 行的开头
- 或分号
到目前为止,它必须是一个不消耗字符串的字符串。
找到上述内容后,它会查找可选的空格,然后查找单词 import
(已捕获)。
正则表达式(带有 mutline 和全局标志 (mg)):
(?<=^|;)\s*(import)
失败,因为 python 中的后视必须是固定宽度:
import sadfsda; import asdf sdaf
import asdfas dfasdf
注意:[^]确实回答了这个问题,因为如何指定符合我要求的固定宽度外观。这只是众多失败的尝试之一。
最佳答案
你可以使用
(?<![^;\n])\s*(import)
请参阅regex demo 。 详细信息:
-
(?<![^;\n])
- 负向后查找,与前面没有紧接着;
的位置相匹配和一个换行符(LF,换行符) -
\s*
- 零个或多个空格 -
(import)
- 第 1 组:import
字符串。
\n
换行匹配模式是必要的,因为如果 \n
则否定字符类匹配换行符不是类的一部分,因此每当您想要将任何行开头的位置与像这样的负向后查找相匹配时,请将其添加到否定字符类中。
请参阅Python demo :
import re
s='''import sadfsda; import asdf sdaf
import asdfas dfasdf'''
rx = r'(?<![^;\n])\s*(import)'
print( re.sub(rx, r'{{\g<0>}}', s) )
输出:
{{import}} sadfsda;{{ import}} asdf sdaf
{{import}} asdfas dfasdf
关于Python正则表达式: Match start of line,或分号,或字符串开头,无捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71236425/