2016-04-26 21 views
0

some.prefixの次のファイル名の部分に一致する正規表現はありますか?複数の拡張子を持つファイル名に一致する正規表現

  • xyz[a-zA-Z0-9-_\.\ ]内の任意の文字することができ[a-z0-9-_\ ]
  • some.prefix一部の任意の文字することができます。

.を意図的にsome.prefixに含めました。

some.prefix.xyz.xyz 
some.prefix.xyz 

私は多くの組み合わせを試しました。たとえば:

(?P<prefix>[a-zA-Z0-9-_\.]+)(?:\.[a-z0-9]+\.gz|\.[a-z0-9]+) 

それはabc.defを引くことにより、abc.def.csvで動作しますが、abc.def.csv.gzでそれをキャッチすることができません。

私は主にPythonを使用しますが、私は正規表現自体を多くの言語に適用する必要があると考えました。

更新:以下の@nowoxとの議論を参照してください。

+0

言語/ツール? – Tushar

+0

最後の '.'の後に何かを削除するとファイル名が与えられます。 '\。[^。] + $'を置き換えます。 – Tushar

+0

接頭辞部分に '\ .'を含めることを追加するのを忘れました。今追加されました。私はそのような正規表現を得ることはまったく可能かどうか疑問に思っています。ある点では正規表現は欲張りです。 – zyxue

答えて

1

は、私はかなりうまく機能あなた正規表現を考えてみてください。私はあなたの例でregex101をしようとすることをお勧めします:

https://regex101.com/r/dV6cE8/3

表現

^(?i)[ \w-]+\.[ \w-]+ 

はあなたのケースで動作するはずです:

som e.prefix.xyz.xyz 
^^^^^^^^^^^ 
some.prefix.xyz 
^^^^^^^^^^^ 
abc.def.csv.gz 
^^^^^^^ 

とPythonであなたが使用することができます。

import re 

text = """some.prefix.xyz.xyz 
some.prefix.xyz 
abc.def.csv.gz""" 

print re.findall('^(?i)[ \w-]+\.[ \w-]+', text, re.MULTILINE) 
表示されます

は:

['som e.prefix', 'some.prefix', 'abc.def'] 

私はあなたの要件について、少し混乱していると思うかもしれません。私がまとめた場合は、パス名はcharsで作られているとdotなど:

foo.bar.baz.0 
foobar.tar.gz 
f.o.o.b.a.r 

はどのようにして、ベース名と拡張子にこれらの文字列を分けるのでしょうか?ここでは、いくつかの既知のパターンを認識します。.tar.gzは間違いなく内線番号ですが、内線番号は.bar.baz.0ですか、それとも.0ですか?

答えは簡単ではなく、この世界の正規表現は何のヒントもなく100%で正解を推測することはできません。たとえば、あなたが許容できる拡張を一覧表示し、いくつかの基準を作ることができます

  • 拡張子が\.\w{1,4}$
  • いくつかの拡張機能は、残りがbasename
  • と呼ばれ一緒に (\.\w{1,4}){1,4}$
  • を連結することができる正規表現にマッチ

この正規表現を作成することができます:

(?P<basename>.*?)(?P<extension>(?:\.\w{1,4}){1,4})$ 
+0

最初の例では、 'some.prefix'と' xyz'を使いたいと思っています。 3番目の例では、 'abc.def'のみ、' csv'はありません。 – zyxue

+0

私の更新を参照してください... – nowox

+0

これはうまくいくようです。 'some.pre fix.xyz.xyz'のようにスペースを考慮することは可能ですか? – zyxue

-1

この[a-z0-9-_\\]+\.[a-z0-9-_\\]+[a-zA-Z0-9-_\.\\]+

+0

いいえ、全く動作しません。ここでは、http://pythex.org/でテストすることができます。 – zyxue

+0

それは私のために働いた..あなたは両方の結果を一致させることを明確にするだけですか? – AJ333

+0

ファイル名の 'some.prefix'部分を抽出できるようにしたいと思います。例えば、ファイル名が 'abc.def.csv.gz'の場合、マッチした結果から' abc.def'を抽出することができます。正規表現の文字列にグループ化が必要な場合があります(例:括弧付き) – zyxue

関連する問題