构建正则表达式,以两个句点分隔文件名字符串

时间:2018-09-27 07:39:53

标签: python regex

我需要构建一个正则表达式,给定一个文件名字符串(该文件名可能包含空格),并且文件名中的1-2个点之间会返回文件名列表。 例如:

00.37.jpg 00.38.jpg Convert To 3 Channels.xml Deploy All Masks.ini

应成为:

[00.37.jpg, 00.38.jpg, Convert To 3 Channels.xml, Deploy All Masks.ini]

我目前有一个执行此操作的正则表达式,但前提是文件名只有一个句点。

Regex = \ ?(.+?\.\w+)

非常感谢。

4 个答案:

答案 0 :(得分:2)

您在正确的轨道上,只需对您的正则表达式进行一点修改(添加可选的点+词组)就可以了:

\ ?(.+?\.\w+(?:\.?\w+))

>>> string="00.37.jpg 00.38.jpg Convert To 3 Channels.xml Deploy All Masks.ini"
>>> re.findall(r"\ ?(.+?\.\w+\.?(?:\w+))", string)
['00.37.jpg', '00.38.jpg', 'Convert To 3 Channels.xml', 'Deploy All Masks.ini']

答案 1 :(得分:1)

尝试此正则表达式:

\?(。+?。\ w +。?\ w +)

答案 2 :(得分:1)

您可以尝试以下操作:

\w.*?\.\w+(?=\s)

说明:

  • \w.*?\.匹配所有内容,直到文件扩展名包括.
  • .\w+与文件扩展名匹配,并且
  • (?=\s)积极的看法断言在文件扩展名之前存在空格

demo and explanation

答案 3 :(得分:1)

1

说明:

string="00.37.jpg 00.38.jpg Convert To 3 Channels.xml Deploy All Masks.ini prog.c the header.h a.b.c.d.e.p"
print re.findall(r"\w.*?\.\w+(?:\.\w+)*", string)

输出:

\w          : 1 word character(i.e. [a-zA-Z0-9_])
.*?         : 0 or more any character but newline
\.          : a dot
\w+         : 1 or more word character
(?:         : start non capture group
    \.      : a dot
    \w+     : 1 or more word character
)*          : end group, may appear 0 or more times. you can use ? instead of * if you want 2 dot max