假设有一个序列 ...a...b...a...b...c... ,其中 a,b 和 c 是字符串常量。点表示 a、b 和 c 之间任意数量的其他(不是 a、b 或 c)符号。
我想以最懒惰的方式匹配“a...b...c”(最后一个 a-b-c 三元组),但正则表达式引擎会获取更大的“a...b...a...b” ...c"并走得更远。
我尝试使用 a\w+b\w+(?!a)\w+c 或 a\w+b\w+?(? !a)\w+?c 等,但到目前为止没有成功。
请您参考如下方法:
您需要使用 tempered greedy tokens在这三个部分之间。
假设 a 是 abc,b 是 bff 而 c 是 CCA。然后,你会使用
(?s)abc(?:(?!abc).)*?bff(?:(?!abc).)*?cca
参见 regex demo
详细信息:
(?s)- 与re.S或re.DOTALL修饰符相同,使.匹配换行abc- 文字字符串abc或某种模式 #1(?:(?!abc).)*?- 除换行符之外的任何 0+ 个字符,不开始abc序列,尽可能少bff- 文字字符串bff或某种模式 #2(?:(?!abc).)*?- 见上文cca- 文字字符串cca或某种模式 #3
