使用 Regex 允许具有正确名称的文件
Allowing files with proper names using Regex
这里有不同的文件,输出应该是这样的:
- abc.csv - 正确
- abc.csv.gz - 失败
- abc.csv.csv - 失败
- abc.def.csv - 正确
目前的正则表达式看起来像 .*[.]csv$
,它通过了案例 1 和案例 2,但没有通过案例 3 和案例 4。我尝试使用 {} 和 \B 只允许 1 个扩展,但无法正确实现.
正如评论中所说,filename.endswith('.csv')
在我看来是最 pythonic 的选项。
也就是说,如果您想使用正则表达式,可以使用 re.match('.*(?<!\.csv)(\.csv)$', s)
或 re.fullmatch('.*(?<!\.csv)(\.csv)', s)
s = 'abc.csv.csv'
re.match('.*(?<!\.csv)(\.csv)$', s)
# no match
s = 'abc.def.csv'
re.match('.*(?<!\.csv)(\.csv)$', s)
#<re.Match object; span=(0, 11), match='abc.def.csv'>
这里有不同的文件,输出应该是这样的:
- abc.csv - 正确
- abc.csv.gz - 失败
- abc.csv.csv - 失败
- abc.def.csv - 正确
目前的正则表达式看起来像 .*[.]csv$
,它通过了案例 1 和案例 2,但没有通过案例 3 和案例 4。我尝试使用 {} 和 \B 只允许 1 个扩展,但无法正确实现.
正如评论中所说,filename.endswith('.csv')
在我看来是最 pythonic 的选项。
也就是说,如果您想使用正则表达式,可以使用 re.match('.*(?<!\.csv)(\.csv)$', s)
或 re.fullmatch('.*(?<!\.csv)(\.csv)', s)
s = 'abc.csv.csv'
re.match('.*(?<!\.csv)(\.csv)$', s)
# no match
s = 'abc.def.csv'
re.match('.*(?<!\.csv)(\.csv)$', s)
#<re.Match object; span=(0, 11), match='abc.def.csv'>