【问题标题】:python regex assistencepython 正则表达式帮助
【发布时间】:2016-04-14 07:01:08
【问题描述】:

我想测试一个文件是否对正则表达式有效。

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)

但我使用的正则表达式总是匹配。这是不正确的。我该如何解决?

【问题讨论】:

  • “不停地说” - 不停地说什么?还有为什么\\ | 之前?你想逃避管道符号而不是斜线吗?
  • “这个结构” - 哪个结构?请编辑您的问题,使其尽可能清晰
  • 我很抱歉朦胧,你是对的@Torxed,我想逃离管道
  • 嗯,我理解这个问题,但问题中没有实际要求。我们只能猜测它们。解决方案是将所有点匹配子模式替换为更具限制性的子模式。

标签: python regex python-3.x


【解决方案1】:

使用您提供的正则表达式,如果第一个条目的第一部分和最后一个条目的最后部分匹配就足够了。因为,正如 Wiktor S 指出的那样,.* 部分 任何东西

尝试限制你的正则表达式

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

我在这里做了一些猜测(比如你并不真的需要来捕捉每个条目的最终部分,可能是重复的部分),所以你可能需要稍微调整一下。 p>

See it in action at regex101.

问候

【讨论】:

    猜你喜欢
    • 2011-06-18
    • 2018-11-05
    • 2023-03-26
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    相关资源
    最近更新 更多