首页 > 解决方案 > re.MULTILINE 标志干扰了行尾 $ 运算符

问题描述

抱歉,如果这是一个重复/基本问题,我找不到任何类似的问题。

我有以下多行字符串

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 不应该干扰 $ 运算符,或者我对 $ 运算符/滥用某些东西是错误的?提前致谢!

标签: python-3.xre

解决方案


您确实需要多行标志,否则$只会匹配输入的绝对结尾。您只需要匹配exe而不是使用前瞻:

my_reg = re.compile(".+[.]exe$", re.MULTILINE)

输出:

['foo.exe', 'abab.exe']

演示

如果您尝试匹配没有扩展名的文件名,则可以将句点放在前瞻中:

my_reg = re.compile(r".+(?=\.exe$)", re.MULTILINE)

输出:

['foo', 'abab']

演示


推荐阅读