我想测试一个文件,如果它与正则表达式有效。
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 :(得分:0)
如果第一个条目的第一部分和最后一个条目的最后一部分匹配,那么你提供的正则表达式就足够了。因为,正如Wiktor S指出的那样,.*
部分吃 任何。
尝试限制你的正则表达式
^(>sp\|[PQ].{5,7}\|(?:.(?!>sp))+?\(\d+aa\)(?:.(?!>sp))*?\[[^\]]*?\][ACDEFGHIKLMNPQRSTVWY]*(?:\d+-\d+:(?:(?!>sp).)+)+)+$
我在这里做了一些猜测(就像你真的没有需要来捕获每个条目的最终的,可能重复的部分),所以你可能需要稍微调整它。
此致