2017-02-27 20 views
1

特定のパターンを検索して、指定されたフォルダのパターンと一致するファイルのみを取得しようとしています。 2つのパターンに一致する正規表現を開発するには、いくつかの支援が必要です。両方に一致する正規表現を見つけることができないようです。 これは私が使用したオリジナルの正規表現である:、この検索パターンの理由正規表現python - ファイル名をキャッチ

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

私は、5つの変数に名前、日付(DD-MM-YY)とフルファイル名を抽出していることで、このファイルの入力日付を参照するフルファイル名に含まれる日付を抽出することができます。だから、抽出は以下でなければなりません

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

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

サンプルファイル名:

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

は今、私は次のことをしようとしています

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

はまた、次のことを試してみました:

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

すべてのファイルに一致する1つのパターンを持つことは可能ですか?それとも2つのパターンに分割する必要がありますか?

+0

愚かな質問かもしれませんが、普通の。* \。xlsx "の何が問題なのでしょうか?あなたが望んでいないそのディレクトリに他のxlsxファイルがありますか? – Bahrom

+0

@Bahromはいそうですが、私は一致したくありません – OAK

答えて

1
パターンはここのように思われる

はまず、いくつかのアルファベットは、アンダースコア一つ以上続いて、xx.xx.xxの形式の日付と終わり.xlsx形式、これ任意の非空白文字、一つまたは複数 回に一致する -

\ S +:

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

ブレイクアップ:としてregexで翻訳することができます。

_ + - アンダースコア文字に1回または複数回一致します。

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