正则表达式查询:任何来自列表包围中心术语

时间:2015-05-21 18:26:58

标签: regex

为丑陋的问题标题道歉:我不确定如何简洁地说出这句话,并且如果之前有人问过道歉:我找不到任何参考资料。

所以,我想创建一个正则表达式查询,由三部分组成:

1) [ABCD]

2) (CD)+|(DC)+

3) [BADC]

问题是这个查询当然会在开头和结尾与任何ABCD匹配。我想要的是开头和结尾是相关的,所以如果它只匹配,如果子串以A开头并以B结尾,则以B开始,以A等结尾(如上面[]中的顺序)

即,我不想匹配ACDCDA,但我确实希望匹配ACDCDB。

我知道通过将四种形式的查询串联起来可以实现这一点:

([A](CD)+|(DC)+[B])|([B](CD)+|(DC)+[A]) etc

但这很快变得丑陋且难以阅读。使用正则表达式有更优雅的方法吗?

编辑:回答评论中的问题: 语言是python,虽然理想情况下我正在寻找一般的正则表达式,以便在必要时可以在其他地方使用。

其他例子:

可接受:

CCDD

DCDC

DDCC

ACDB

ACDCDCDCDB

BCDA

不接受:

ACDA

ACDCDA

ACDDCA

CCDC

1 个答案:

答案 0 :(得分:2)

您可以使用以下内容(我写的最短):

((?=^A.*B$)|(?=^B.*A$)|(?=^C.*D$)|(?=^D.*C$))[ABCD]((CD)+|(DC)+)[ABCD]

说明:

  • (?=^A.*B$)断言如果模式以A开头,那么它应该以B
  • 结束

与其他人相似..

请参阅DEMO