Regex 正则表达式查询:任何包含中心术语的列表

Regex 正则表达式查询:任何包含中心术语的列表,regex,Regex,为难看的问题标题道歉:我真的不知道如何简明扼要地表达这一点,如果以前有人问过,我道歉:我找不到任何参考资料 因此,我想创建一个regex查询,由三部分组成: 1) [ABCD] 2) (CD)+|(DC)+ 3) [BADC] 问题是,此查询当然会匹配开头和结尾的任何ABCD。我想要的是开始和结束是相关的,因此,如果它只匹配子字符串以A开头以B结尾,以B开头以A结尾等(如上面[]中的顺序) 即,我不想匹配ACDCDA,但我确实想匹配ACDCDB 我知道,通过将表单的四个查询串在一起,这是可

为难看的问题标题道歉:我真的不知道如何简明扼要地表达这一点,如果以前有人问过,我道歉:我找不到任何参考资料

因此,我想创建一个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

ACDCDB

BCDA

不可接受:

ACDA

ACDCDA

ACDDCA

CCDC

您可以使用以下选项(我能写的最短):

说明:

  • (?=^A.*B$)
    断言如果模式以A开头,则应以B结尾
其他人也是如此


请参见

您使用的是哪种语言?您可以发布其他可接受和不可接受的字符串吗?
DDCD
不应采用可接受的模式:)谢谢!字母太多,眼睛开始模糊…此图案也与
acddcblablab
匹配。您需要将其更改为
(?=^A.*B$)|(?=^B.*A$)|(?=^C.*D$)|(?=^D.*C$)(?=^((CD)+(DC)+.$)
,更短,更有效/
((?=^A.*B$)|(?=^B.*A$)|(?=^C.*D$)|(?=^D.*C$))[ABCD]((CD)+|(DC)+)[ABCD]