Skip to main content
 首页 » 编程设计

python之带有可选捕获组和否定前瞻的正则表达式

2025年04月02日35jirigala

这个问题困扰我很久了。这是我要搜索的字符串的基础:

aa.bb.cc

每个标记(由'.'标记)可以在零个或多个数组索引组之后/后跟:

例如aa[1].bb[2][3].cc

如果我的文本包含一个字符串,其中包含带有可选数组索引的确切标记数,我想匹配。但是,如果我要搜索的文本包含一个额外的“。”和 token ,我不想要任何匹配:

例如 aa[1].bb[2].cc.dd

我很难找到一个模式,其中包含带有负先行的可选数组索引组 - 我一直在使用 (?!\.) - 作为模式。这是我尝试过的模式之一:

((\w+)([\[\]\w]+)*\.(\w+)([\[\]\w]+)*\.(\w+)([\[\]\w]+)*)(?!\.) 

如果我的搜索字符串是aa[1].bb[2][3].cc 组如下:

  1. aa[1].bb[2][3].cc
  2. 一个
  3. [1]
  4. bb
  5. [2][3]
  6. 抄送
  7. 没有

但是,如果我的搜索字符串包含一个标记,甚至只是“.”,如上所述,我希望整个匹配失败。但是,搜索会返回相同的匹配组。

请您参考如下方法:

使用这个模式,它会在任何地方捕获 3 组:

(?<!\.)\b((?:(?:\w+(?:\[\d+\])*)\.){2}(?:\w+(?:\[\d+\])*))(?![\w\.]) 

Demo