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

标签 python regex python-2.7

Assume that we have:

  1. ABC_ANY_STRING_DEF
  2. ANY_STRING
  3. ANY_STRING_DEF
  4. ABC_CDE_ANY_STRING_DEF

“ABC_”或“CDE_”可以是前缀,也可以不存在。另外,“_DEF”可以是后缀,也可以不存在。

In this case, can I extract ANY_STRING (which is just any set of characters, just a string) between prefix and postfix by using one regular expression?

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

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

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

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

提前非常感谢您的建议。

最佳答案

您可以使用

(?:ABC_|CDE_|^)+(\S*?)(?:_DEF|$)

请参阅regex demo

详细信息

  • (?: - non-capturing group 的开始匹配任何用 alternation operator 分隔的子模式| :
    • ABC_ - 文字子串 ABC_
    • | - 或
    • CDE_ - 文字子串 CDE_
    • | - 或
    • ^ - 字符串开头
  • )+ - 一次或多次连续出现,尽可能多( + 是贪婪量词)
  • (\S*?) - 捕获组 1:除空白之外的零个或多个字符,但由于*?而尽可能少。惰性量词
  • (?:_DEF|$) - 要么 _DEF或 ( | ) 字符串结尾 ( $ )。

关于python - 正则表达式最后删除不必要的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51493070/

相关文章:

regex - 说两个字母具有相同的量词而不在正则表达式中指定数字

regex - 正则表达式以匹配不可约分数

python - 异常值: cannot import name TimeoutStateError when import Geocoder

regex - vim 搜索通配符匹配第一次出现

Python 结构错误

python - 在给定两个列表的情况下查找前 K 个产品的有效方法

python - 通过 Pandas Python 计算不同的组

python - 没有输出,即使有 `py.test -s`

python - 通过维护列表中值的映射顺序来随机化两个列表

javascript - Uncaught ReferenceError : $ is not defined python flask