对丑陋的问题标题表示歉意:我不太确定如何简洁地表达这个问题,如果之前有人问过这个问题,我深表歉意:我找不到任何引用资料。
所以,我想创建一个正则表达式查询,由三部分组成:
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
ACDCCDCDB
BCDA
Not Acceptable :
ACDA
ACDCDA
ACDDCA
中央结算公司
最佳答案
您可以使用以下内容(我能写的最短的):
((?=^A.*B$)|(?=^B.*A$)|(?=^C.*D$)|(?=^D.*C$))[ABCD]((CD)+|(DC)+)[ABCD]
说明:
(?=^A.*B$)
断言如果模式以 A 开头,那么它应该以 B 结尾
对于其他人来说也是如此......
参见DEMO
关于正则表达式查询 : any from list bracketing central term,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30381592/