2017-02-27 79 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