Python 3.x re.MULTILINE标志干扰行尾$operator
抱歉,如果这是一个重复的/基本的问题,我找不到任何类似的问题 我有以下多行字符串Python 3.x re.MULTILINE标志干扰行尾$operator,python-3.x,re,Python 3.x,Re,抱歉,如果这是一个重复的/基本的问题,我找不到任何类似的问题 我有以下多行字符串 my_txt = """ foo.exe\n bar.exec\n abab.exe\n """ (换行符实际上并没有写在我的代码中,为了清晰起见,我把它们放在那里)。 我想匹配每个以.exe(而不是.exec)结尾的文件。 我的正则表达式最初是: my_reg = re.compile(".+[.](?=exe$)") my_mat
my_txt = """
foo.exe\n
bar.exec\n
abab.exe\n
"""
(换行符实际上并没有写在我的代码中,为了清晰起见,我把它们放在那里)。
我想匹配每个以.exe(而不是.exec)结尾的文件。
我的正则表达式最初是:
my_reg = re.compile(".+[.](?=exe$)")
my_matches = my_reg.finditer(my_txt)
我希望它首先找到每个字符,然后返回,直到找到
,然后检查字符exe
和换行符是否紧跟其后。
仅找到一个匹配项,即:
abab.exe
。
我试着把事情弄得一团糟,改变了第一行:
my_reg=re.compile(“.+[.](?=exe$)”,flags=re.MULTILINE)
。
这一次,它成功地运行并返回
foo.
abab.
我认为re.MULTILINE不应该干扰$operator,或者我对$operator/误用某些东西的看法是错误的?
提前谢谢 您确实需要多行标志,否则,
$
将只匹配输入的绝对结尾。您只需要匹配exe
,而不是使用前瞻:
my_reg = re.compile(".+[.]exe$", re.MULTILINE)
my_reg = re.compile(r".+(?=\.exe$)", re.MULTILINE)
输出:
['foo.exe', 'abab.exe']
['foo', 'abab']
如果您试图匹配不带扩展名的文件名,可以将句点放在前看中:
my_reg = re.compile(".+[.]exe$", re.MULTILINE)
my_reg = re.compile(r".+(?=\.exe$)", re.MULTILINE)
输出:
['foo.exe', 'abab.exe']
['foo', 'abab']
您希望的输出是什么?你想在结尾加上“.exe”还是不加?这对我来说真的不重要,我主要关心的是找到文件名foo。