2016-04-14 14 views
-3

ファイルが正規表現で有効であるかどうかをテストしたいです。python regex assistence

file_string = >sp|Q1ABCD|003R_FRG3G(438aa)Uncharacterizedprotein1A.[virus1(isolateABCD)(AB-1)]MLFLGTIGLAVVVGGLMAYGYYYGHHDE2-9:ArpllGKT>sp|Q2DBAC|004R_FRG3G(60aa)Uncharacterizedprotein1B.[virus2(isolateBGF)(AB-2)]NAKYDTDQGVGRMLFLGTIGLAVVVGGLMAYGYYYDGKTPSSGTSFHTASPSFSSRYRY33-40:GyyydGKT50-100:GyyydGKT>sp....... > sp ...とは、そういう意味です。

pattern = '^(>sp\\|[PQ].{5,7}\\|.+\\(\d+aa\\).*\\[.*\\][ACDEFGHIKLMNPQRSTVWY]*(\d+-\d+:.+)+)+$' 
    import re 
    ant = re.match(pattern,file_string) 

しかし、正規表現は常に一致を使用します。それは正しくありません。どうすれば修正できますか?

+0

「何かお伝えしますか?なぜ '\'の前に '\\'があるのですか?あなたはスラッシュではなくパイプの看板から脱出したいですか? – Torxed

+0

「この構造」 - どの構造ですか?あなたの質問をできるだけ明確に編集してください – Francesco

+0

['^(> sp \ | [PQ] [^ |] + \ |。+?\(\ d + aa \)。 ] [AC-IK-NP-TVWY] * \ d + - \ d +:。+)+ $ '](https://regex101.com/r/mY1uD0/2)。 –

答えて

0

あなたが入力した正規表現では、最初のエントリの最初の部分と最後のエントリの最後の部分が一致していれば十分です。 Wiktor Sが指摘したように、.*の部分の何かを食べるので。

(あなたが本当には、各エントリの最後の、おそらく繰り返し、一部をキャプチャするを必要としないことのように)私はここにいくつかの推測を行ってきた

^(>sp\|[PQ].{5,7}\|(?:.(?!>sp))+?\(\d+aa\)(?:.(?!>sp))*?\[[^\]]*?\][ACDEFGHIKLMNPQRSTVWY]*(?:\d+-\d+:(?:(?!>sp).)+)+)+$ 

のようなあなたの正規表現を制限してみますのでかもしれませんそれをいくらか適応させなければならない。

See it in action at regex101

よろしくお願いいたします。