擅长:python、mysql、java
<p>要进一步解释Avinash在他的<a href="https://stackoverflow.com/questions/27128143/extract-text-between-double-square-brackets-in-python/27128161#27128161">answer</a>中使用的regex:</p>
<p><code>Category:([^\[\]]*)</code>由几个部分组成:</p>
<ul>
<li><code>Category:</code>匹配文本“Category:”</li>
<li><code>(...)</code>是一个捕获组,大致意思是“这个组中的表达式是我要提取的块”</li>
<li><code>[^...]</code>是一个否定集,意思是“不匹配此集中的任何字符”。在</li>
<li><code>\[</code>和{<cd6>}分别匹配文本中的“[”和“]”。在</li>
<li><code>*</code>表示“匹配前面的正则表达式定义的项中的零个或多个”</li>
</ul>
<p>在这里,我使用<code>...</code>来表示我删除了一些对解释不重要的字符。在</p>
<p>因此,将所有这些放在一起,regex会这样做:</p>
<p>查找“Category:”,然后匹配其后不属于排除字符“[”或“]”的任何数字(包括零)字符。当它碰到一个被排除的字符时,它将停止,并返回<code>(...)</code>部分中与正则表达式匹配的文本。因此regex实际上并没有像您预期的那样查找“[[”或“]]”,因此即使遗漏了它们也会匹配。您可以通过将其更改为<code>\[\[Category:([^\[\]]*)\]\]</code>来强制它查找开头和结尾的双方括号。在</p>
<p>对于第二个正则表达式<code>Category:[^\[\]]*</code>,捕获组<code>(...)</code>被排除,因此Python返回匹配的所有内容,其中包括“Category:”。在</p>