正则表达式匹配模式之间的内容与条件相同的模式Python环境

问题描述 投票:1回答:1

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

我这样做:\[\[(?!\[\[).[:]+.*?\]\]

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

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

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

Example

真正的方法是什么?

regex python-3.x
1个回答
1
投票

当你必须匹配[[ : ]]类似的字符串时,你应首先匹配[[,然后任何不是:的0 +字符并且不启动前导/后续序列,即[[]],那么你需要匹配:字符,然后任何0+字符到]]的第一个(最左边)出现。

您可以使用的模式是

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

regex demo。记得使用re.DOTALLre.S.匹配多行。

细节

  • \[\[ - 一个[[子串
  • (?:(?!\[\[|]])[^:])* - tempered greedy token匹配除:之外的任何其他字符(参见[^:]否定字符类),0次(参见*),这不会启动[[]]序列
  • : - 一个冒号
  • .*? - 任何0+字符,尽可能少
  • ]] - 一个]]子串。
© www.soinside.com 2019 - 2024. All rights reserved.