Assume that we have:
- ABC_ANY_STRING_DEF
- ANY_STRING
- ANY_STRING_DEF
- 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/