假设我有一个只包含A,B和C的字符串。
我想要提取某种模式的子串:它们从ABC开始,继续使用B和C的组合,然后以CBA结束。
天真的解决方案是使用ABC[BC]*CBA
。
但是,这不会涵盖ABCBA
字符串。除了使用|
寻找两个可能的RE之外,还有“pythonic”方法来解决这个问题吗?
答案 0 :(得分:5)
答案 1 :(得分:2)
您不需要使用外观,使用可选组:
ABC(?:[BC]*C)?BA
请参阅regex demo。
<强>详情
ABC
- ABC
子字符串(?:[BC]*C)?
- non-capturing group匹配0个或多个B
或C
个字符,后跟C
个字母BA
- BA
子字符串。这将有效地匹配AB
只能跟随C
然后跟随任意数量的B
或C
字母(但此字母的牛排是可选的),与CBA
。
请注意,根据您对模式的处理方式,捕获组也会执行ABC([BC]*C)?BA
。