如果模式匹配,我试图从整个文件列表中选择一个文件名。文件每15天不断变化,仅文件的特定部分匹配。
文件名通常为ABCD.NAD.RPT8.2018.10.12.TXT
。 NAD
之前和RPT8
或RPT9
更改之后的部分。
模式为NAD.RPT8
或NAD.RPT9
我尝试过:
from os import walk
from os.path import splitext
import re
dolv_files = os.listdir(r'C:\DOLV')
for file_name in dolv_files:
fname1=file_name.rsplit('.',4)[0]
pattern = re.compile(r'NAD.RPT*')
matches = [x for x in fname1 if pattern.match(x)]
print(matches)
first_fname=os.listdir(r'C:\DOLV')[0]
print(first_fname)
它没有给我任何结果。它需要使用NAD.RPT8
或NAD.RPT9
任何建议如何使其正常工作。
关于, 仁。
答案 0 :(得分:0)
re.match
方法仅从字符串的开头开始匹配。要匹配字符串中的任何位置,应改用re.search
。另外,似乎您正在使用全局模式而不是正则表达式模式。在正则表达式模式中,*
意味着要匹配0个或多个前面的字符,因此RPT*
实际上匹配RP
,RPT
,RPTT
,{{1 }}等,并且RPTTT
匹配除换行符以外的任何字符,而不仅仅是点。但更重要的是,您的.
变量是一个字符串,因此如果您使用fname1
遍历fname1
,则x
就是x
的每个字符。您应该直接与fname1
匹配。但是,实际上,您实际上只是与固定字符串fname1
匹配,因此不需要正则表达式,而只需使用NAD.RPT
运算符即可:
in
答案 1 :(得分:0)
使用dim(gtools::permutations(10, 10))
:
pathlib