擅长:python、mysql、java
<p>最简单的方法来执行你所说的“正确证明”匹配,即优先匹配后面的可选子表达式,是反转可选组件的“贪婪”。在Python regex中,这是通过向每个量化元素添加<code>?</code>来实现的:</p>
<pre><code>(\w+ *\w* *\w*) (\d*?\.*?\d*?) *?(\d*?\.*?\d*?) *?(\d*?\.*?\d*?)\n
</code></pre>
<p>请注意,您的表达式非常自由,不会验证某些格式不正确的输入。如果这对您有效,那太好了,否则您可能需要考虑将某些部分粘贴到可选组中,例如<code>(| \d+(?:\.\d+)?)</code>来延迟地匹配一个空格和数字(例如,<code>(|x)</code>相当于<code>((?:x)??)</code>)。在</p>
<p>编辑:正如Tim所指出的,这个正则表达式的缺点不仅仅是允许性,而且如果输入的格式稍有错误,可能会引发灾难性的回溯。如果你打算坚持这种方法,我推荐一些更精确的方法:</p>
^{pr2}$
<p>它仍然可以匹配格式错误的输入,但至少现在有点紧了。在</p>