是否有正则表达式与以下两个文件名的some.prefix
部分相匹配?
xyz
可以是[a-z0-9-_\ ]
some.prefix
部分可以是[a-zA-Z0-9-_\.\ ]
中的任何字符。 我故意在.
中添加some.prefix
。
some.prefix.xyz.xyz
some.prefix.xyz
我尝试过很多种组合。例如:
(?P<prefix>[a-zA-Z0-9-_\.]+)(?:\.[a-z0-9]+\.gz|\.[a-z0-9]+)
通过捕获abc.def.csv
与abc.def
一起使用,但无法在abc.def.csv.gz
中捕捉到它。
我主要使用Python,但我认为正则表达式本身应该适用于多种语言。
更新:这是不可能的,请参阅下面与@nowox的讨论。
答案 0 :(得分:1)
我认为您的正则表达式效果很好。我建议您尝试使用regex101示例:
https://regex101.com/r/dV6cE8/3
表达式
^(?i)[ \w-]+\.[ \w-]+
应该适合你的情况:
som e.prefix.xyz.xyz
^^^^^^^^^^^
some.prefix.xyz
^^^^^^^^^^^
abc.def.csv.gz
^^^^^^^
在Python中你可以使用:
import re
text = """some.prefix.xyz.xyz
some.prefix.xyz
abc.def.csv.gz"""
print re.findall('^(?i)[ \w-]+\.[ \w-]+', text, re.MULTILINE)
将显示:
['som e.prefix', 'some.prefix', 'abc.def']
我可能会认为你对你的要求有点困惑。如果我总结一下,您的路径名由chars
和dot
组成,例如:
foo.bar.baz.0
foobar.tar.gz
f.o.o.b.a.r
您如何将这些字符串分成基本名称和扩展名?在这里,我们认识到一些已知模式.tar.gz
绝对是一个扩展,但.bar.baz.0
是扩展名,还是只有.0
?
答案并不容易,如果没有一些提示,本世界没有正则表达式可以在100%时猜出正确的答案。
例如,您可以列出可接受的扩展名并制定一些标准:
\.\w{1,4}$
(\.\w{1,4}){1,4}$
basename
从中你可以构建这个正则表达式:
(?P<basename>.*?)(?P<extension>(?:\.\w{1,4}){1,4})$
答案 1 :(得分:-1)
试试这个[a-z0-9-_\\]+\.[a-z0-9-_\\]+[a-zA-Z0-9-_\.\\]+