正则表达式查询 : any from list bracketing central term

标签 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

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/

相关文章:

javascript - 如何使用 JavaScript 正则表达式查找第一个子字符串直到空格?

c# - 正则表达式检查重复

java - 正则表达式 - 匹配具有不同匹配模式的字母

Python 和网络标签正则表达式

regex - 分割 CSV 文件中的字符串

c++ - 使用不匹配单词的正则表达式链捕获

python - 使用 findall 捕获组?

regex - 如何在命令行中使用 perl 替换正则表达式多行 dotall

java - 为什么java正则表达式失败

javascript - 删除特定字符,除非前面有某个特定字符串