Skip to main content
 首页 » 编程设计

python之提示需要使用正则表达式环视

2025年02月15日29arxive

假设有一个序列 ...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