昨天我问了一个类似的问题,但我仍然缺乏正则表达式的一些部分的知识。
无论如何我有这个字符串:
[[{{6^-2}}x{{6^3}}|{{6^-2}}]]
我想匹配以下正则表达式:
\[\[(.*?)\^(.*?)\]\]
所以基本上想要隔离如果这个字符串有[[anything ^ anything]]
它的作用在一定程度上,但它也匹配,因为那里的^
符号。我不希望这与那些匹配,这个表达式不应该匹配,因为符号是|
而不是方括号之间的^
。
基本上它应该忽略{}内部的部分
编辑提出更多意见:
示例字符串:[[{{hello ^ test}} | {{goodbye}}]]我的模式:[[(。?)\ ^(。?)]]预期匹配:False因为我只想匹配^ if它是由[[]]包围的字符串的外部部分的一部分,如果它在{{}}内部则不是
示例字符串:[[{{hello ^ test}} ^ {{goodbye}}]]我的模式:[[(。?)\ ^(。?)]]预期匹配:为真,因为^内的两侧[[ ]]匹配,忽略{{}}内的内容
示例字符串:[[{{hello ^ test}} ^ {{goodbye ^ test}}]]我的模式:[[(。?)\ ^(。?)]]预期匹配:为真,因为^再次位于{{}}中的两个部分,需要忽略{{}}内的内容
示例字符串:[[{{hello ^ test}} | {{goodbye ^ test}}]]我的模式:[[(。?)\ ^(。?)]]预期匹配:False因为内部没有^ [{]]仅在{{}}内部,应该被忽略
我的模式不起作用,因为它也在{{}}内拾取^符号并匹配它的任一侧,我需要它匹配包含在[[]]而不是{{}中的^的任一侧}}
我希望这是有道理的..
\[\[(\{\{.+?\}\}|[^^{}]+)\^(.+?)\]\]
说明:
\[\[ # 2 opening square brackets
( # start group 1
\{\{ # 2 opening curly braces
.+? # 1 or more any character, not greedy
\}\} # 2 closing curly braces
| # OR
[^^{}]+ # 1 or more NON carret or curly braces
) # end group 1
\^ # a carret
(.+?) # group 2, 1 or more any characters, not greedy
\]\] # 2 closing square brackets