正则表达式可最后删除不必要的字符串

时间:2018-07-24 07:40:03

标签: python regex python-2.7

  

假设我们有:

  1. ABC_ ANY_STRING _DEF
  2. ANY_STRING
  3. ANY_STRING _DEF
  4. ABC_CDE_ ANY_STRING _DEF

“ ABC_”或“ CDE_”可以是前缀或不存在。此外,“ _ DEF”可以是后缀或不存在。

  

在这种情况下,我可以使用一个正则表达式在前缀和后缀之间提取 ANY_STRING (只是任何字符集,只是一个字符串)吗? >

例如,输入=“ ABC_CDE_I like a apple_DEF”,则输出必须为“ I like a apple”。

我尝试了以下代码,但是没有输出预期的结果。

re.compile("(?:ABC_|CDE_)*(\S+)(?:_DEF)?")

re.compile("(?:ABC_|CDE_)*(\S+)(?:_DEF)*")

非常感谢您的建议。

1 个答案:

答案 0 :(得分:2)

您可以使用

SomeManager

请参见regex demo

详细信息

  • (?:ABC_|CDE_|^)+(\S*?)(?:_DEF|$) -一个non-capturing group的开头,该alternation operator与用https://docs.python.org/2/library/argparse.html#add-help (?:分隔的任何子模式匹配:
    • |-文字子字符串ABC_
    • ABC_-或
    • |-文字子字符串CDE_
    • CDE_-或
    • |-字符串的开头
  • ^-一次或多次连续出现,并尽可能多()+是一个贪婪的量词)
  • +-捕获第1组:零个或多个除空格以外的字符,但由于(\S*?)惰性量词而导致的字符数尽可能少
  • *?-字符串((?:_DEF|$))的结尾_DEF或(|)。