首页 > 解决方案 > 正则表达式匹配模式之间的内容与相同模式Python环境中的条件

问题描述

需要匹配模式:[[ : ]],

我愿意:\[\[(?!\[\[).[:]+.*?\]\]

但是当模式有许多相同模式的环境时:[[:]] [[ [] ]] [[]] [[ : ]] [[ : ]] 匹配失败,返回:[[ : ]], [[ : ]]

或者,如果正则表达式是:\[\[.*?[:]+.*?\]\],则给出:

[[  []  ]] [[]] [[ :  ]] instead of [[ :  ]]

例子

什么是真道?

标签: regexpython-3.x

解决方案


当你必须匹配[[ : ]]类似字符串时,你应该[[首先匹配,然后任何 0+ 字符不是:并且不开始前导/结束序列,即[[]],然后你需要匹配一个:字符,然后是任何 0+ 字符直到第一次(最左边)出现]].

您可以使用的模式是

\[\[(?:(?!\[\[|]])[^:])*:.*?]]

请参阅正则表达式演示。请记住使用re.DOTALLorre.S.匹配多行。

细节

  • \[\[- 一个[[子串
  • (?:(?!\[\[|]])[^:])*- 与 a以外的任何字符匹配的缓和的贪婪令牌:(参见[^:]否定字符类),0+ 次(参见*),不开始 a[[]]序列
  • :- 一个冒号
  • .*?- 任何 0+ 个字符,尽可能少
  • ]]- 一个]]子串。

推荐阅读