Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x re.MULTILINE标志干扰行尾$operator_Python 3.x_Re - Fatal编程技术网

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。