模式的正则表达式以ABC开头,然后是B和/或C,以CBA结束

时间:2018-05-29 10:25:32

标签: python regex

假设我有一个只包含A,B和C的字符串。

我想要提取某种模式的子串:它们从ABC开始,继续使用B和C的组合,然后以CBA结束。

天真的解决方案是使用ABC[BC]*CBA

但是,这不会涵盖ABCBA字符串。除了使用|寻找两个可能的RE之外,还有“pythonic”方法来解决这个问题吗?

2 个答案:

答案 0 :(得分:5)

您可以使用lookarounds

AB(?=C)[BC]*(?<=C)BA

即。确保AB后跟CBA后面跟C,即使它们是相同的C

答案 1 :(得分:2)

您不需要使用外观,使用可选组:

ABC(?:[BC]*C)?BA

请参阅regex demo

<强>详情

  • ABC - ABC子字符串
  • (?:[BC]*C)? - non-capturing group匹配0个或多个BC个字符,后跟C个字母
  • BA - BA子字符串。

这将有效地匹配AB只能跟随C然后跟随任意数量的BC字母(但此字母的牛排是可选的),与CBA

请注意,根据您对模式的处理方式,捕获组也会执行ABC([BC]*C)?BA