<p>反向回答:
不,字符类只是括号内文本的简写。它们提供组的方式与用括号括起来的方式不同。它们只允许正则表达式引擎选择指定的字符</p>
<p>关于查找逗号和点:事实上,我在这里看到了问题所在,尽管下面的内容可能仍然很有价值,所以我将保留它。本质上,您有:<code>[a-zA-Z0-9.%+-\\/_]+</code>字符有特殊的含义:<code>-</code>字符之间的所有内容都是ascii码。因此<code>[A-a]</code>是一个有效范围。它包括A-Z,但也包括一堆其他非A-Z的字符。如果要将-包括在范围内,则需要是<em>最后一个</em>字符:<code>[a-zA-Z0-9.%+\\/_-]+</code>应该有效</p>
<hr/>
<p>对于逗号,我实际上看不到它在正则表达式中的表示,所以我不能具体对此发表评论。它不应该被允许在url中的任何地方。但一般来说,您只需要添加更多组/更多条件</p>
<p>首先,将url拆分为所需的特定组:
(方案):/(域)(端点)</p>
<p>每个部分都有不同的要求:例如,域可能需要以斜杠结尾:
<code>[a-zA-Z0-9]+\.com/</code>应该匹配任何使用字母数字字符的域,并以.com结尾(注意<code>\.</code>,否则它将捕获任何后跟<code>com/</code>的单个字符</p>
<p>对于endpoint部分,您可能仍然希望允许使用特殊字符,但是如果您确信不希望url以点结尾,那么您可以做一些事情<code>[A-Za-z0-9]</code>注意这里没有点,另外,它的长度只有一个字符。这将改变您的正则表达式的其余部分,因此您需要考虑这一点</p>
<p>一些随机的想法:</p>
<ol>
<li>如果您确信要匹配整行,请在正则表达式的末尾添加一个<code>$</code>,以表示该行的结尾。这里的一种可能性是您的正则表达式确实匹配文本的某些部分,但忽略了结尾的垃圾,因为您没有说要阅读整行</li>
<li>正则表达式变得非常复杂,它们是一种只写的代码</li>
</ol>
<pre><code>web_url_regex = re.compile(
r'(http://|https://)' # Capture the scheme name
r'([a-zA-Z0-9.%+-\\/_])' # Everything else, apparently
)
</code></pre>
<ol start=“3”>
<li>在验证过程中不要试图详尽无遗,如上所述,URL很难验证,因为您无法确定URL是否有效。但表单非常一致,如上所述:方案、域、端点(和查询字符串)</li>
</ol>