擅长:python、mysql、java
<p>您不需要模式中的<code>*</code>,它会导致问题,因为您试图量化模式的开头,但是没有任何东西需要量化,一个<em>空字符串</em></p>
<p>当您</p>
<ul>
<li>将<em>任何</em>量词(<code>+</code>、<code>?</code>、<code>*</code>、<code>{2}</code>、<code>{4,5}</code>等)放在模式的开头(例如<code>re.compile(r'?')</code>)</li>
<li>在字符串锚点的<code>^</code>/<code>\A</code>开始之后添加任何量词(例如<code>re.compile(r'^*')</code>)</li>
<li>在字符串锚点的<code>$</code>/<code>\Z</code>结尾之后添加任何量词(例如<code>re.compile(r'$*')</code>)</li>
<li>在单词边界后添加任何量词(例如<code>re.compile(r'\b*\d{5}')</code>)</li>
</ul>
<p>但是请注意,在Python <code>re</code>中,您可以量化任何查找,例如<code>(?<!\d)*abc</code>和<code>(?<=\d)?abc</code>将产生相同的匹配,因为查找是可选的</p>
<p>使用</p>
<pre><code>([a-zA-Z]+)\.csv
</code></pre>
<p>或匹配整个字符串:</p>
<pre><code>.*([a-zA-Z]+)\.csv
</code></pre>
<p>见<a href="https://regex101.com/r/wO3iZ6/1" rel="nofollow noreferrer">demo</a></p>
<p>原因是<code>*</code>是不可替代的,因此被视为量词。它应用于正则表达式中前面的子模式。在这里,它用于模式的开头,因此不能量化任何内容。因此,<strong>不会抛出任何要重复的内容</p>
<p>如果它在VIM中“起作用”,那只是因为VIM正则表达式引擎忽略了这个子模式(与Java在字符类(如<code>[([)]]</code>)中使用未scaped的<code>[</code>和<code>]</code>时所做的相同)</p>