我正在尝试搜索特定模式,以便只抓取与给定文件夹中的模式对齐的文件。 我需要一些帮助来开发一个匹配两种模式的正则表达式 - 我似乎找不到两种模式匹配的表达式。 这是我使用的原始正则表达式:
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"
是否可以让一个模式匹配所有文件?或者我应该将它们分成两种模式?
答案 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()
。