正则表达式python - 捕获文件名

时间:2017-02-27 17:47:18

标签: python regex

我正在尝试搜索特定模式,以便只抓取与给定文件夹中的模式对齐的文件。 我需要一些帮助来开发一个匹配两种模式的正则表达式 - 我似乎找不到两种模式匹配的表达式。 这是我使用的原始正则表达式:

r"^([a-zA-Z]+)__?(\d+).(\d+).(\d+)\.xlsx"

这种搜索模式的原因是,然后我将名称,日期(dd-mm-yy)和完整文件名提取为五个变量,这样我就可以提取全文名中包含的日期了指文件的输入日期。

for name, day, month, year, fullfilename in files

现在我正在尝试以下方法:

files = []
for f in os.listdir(drive):
    match = re.search(r"^([a-zA-Z-]+)__?(\d+).(\d+).(\d+).xlsx$",f)
    if match:
        files.append(match.groups() + (f,))

示例文件名:

filename_19.01.17.xlsx
filename__04.01.17.xlsx
AB_TEST_DATA-OUTER_13.02.17.xlsx

因此提取应该如下:

filename, 19, 01, 17, filename_19.01.17.xlsx

还尝试了以下内容:

r"^(([a-zA-Z-]+)(__?)){1,3}(\d+).(\d+).(\d+).xlsx"

是否可以让一个模式匹配所有文件?或者我应该将它们分成两种模式?

2 个答案:

答案 0 :(得分:1)

这里的模式似乎如下:

首先,一些字母表,后面跟着一个或多个得分,最后格式为xx.xx.xx,最后是.xlsx格式,可以转换为正则表达式:

\S+_+(\d+.){3}\.xlsx
  

分手:

     

\ S + - 匹配任何非空白字符,一个或多个   次。

     

_ + - 将得分不足的角色匹配一次或多次。

     

(\ d +。){3} - xx.xx.xx格式的数字。

     

.xlsx - 匹配文件的扩展名。

答案 1 :(得分:1)

你可以去:

^.+__?(\d{2})\.(\d{2})\.(\d{2})\.xlsx$

分解这意味着:

^         # start of the string
.+        # anything up to the end, giving up as needed
__?       # one or two underscores
(\d{2})\. # exactly two digits, followed by a dot
(\d{2})\.
(\d{2})\.
xlsx      # "xlsx" literally
$         # the end

a demo on regex101.com。另外,请查看glob()