为丑陋的问题标题道歉:我不确定如何简洁地说出这句话,并且如果之前有人问过道歉:我找不到任何参考资料。
所以,我想创建一个正则表达式查询,由三部分组成:
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
答案 0 :(得分:2)
您可以使用以下内容(我写的最短):
((?=^A.*B$)|(?=^B.*A$)|(?=^C.*D$)|(?=^D.*C$))[ABCD]((CD)+|(DC)+)[ABCD]
说明:
(?=^A.*B$)
断言如果模式以A开头,那么它应该以B 与其他人相似..
请参阅DEMO