2017-02-27 81 views
1

我试图搜索一个特定的模式,只抓住那些与给定文件夹中的模式对齐的文件。 我需要一些帮助来开发一个匹配两个模式的正则表达式 - 我似乎无法找到一个匹配两个模式的匹配。 这是原来的正则表达式我使用:正则表达式python - 抓文件名

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

可能是一个愚蠢的问题,但简单的'“。* \。xlsx”'有什么问题?那个目录中还有其他的xlsx文件,你不想要? – Bahrom

+0

@Bahrom是的,我不想匹配 – OAK

回答

1

这里的图案似乎为:首先,某些字母,接着在分数的一个或多个

,在xx.xx.xx的格式的日期和在结束时.xlsx格式,这可以转换为正则表达式为:

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

破裂:

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

_ + - 一次或多次匹配低分字符。

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

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

+0

这是一个完整的比赛,太棒了!但我更改具体细节,请参阅上文。我基本上想要有团队。 – OAK

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()

+0

这不适合我。 – OAK

+0

@OAK:在这里什么都不适合你? – Jan