擅长:python、mysql、java
<p>看起来你只需要从第一个报价到最后一个报价的所有内容,即使中间还有其他报价。这就足够了:</p>
<pre><code>".*"
</code></pre>
<p>您的正则表达式中的前导和尾随<code>.*</code>是不需要的,并且前导的一个正在扭曲您的结果。它将首先消耗整个输入,然后后退足够远,让regex的其余部分匹配,这意味着<code>(".*")</code>将只匹配最后两个引号。你知道吗</p>
<p>你也不需要括号。您要查找的字符串部分现在是整个匹配项,因此可以使用<code>group(0)</code>而不是<code>group(1)</code>检索它。如果字符串中可能有换行符,并且您也希望匹配这些换行符,则可以将其更改为:</p>
<pre><code>(?s)".*"
</code></pre>
<p><code>.</code>元字符通常不匹配换行符,但是<code>(?s)</code>为regex的其余部分打开<code>DOTALL</code>模式。你知道吗</p>
<hr/>
<p>EDIT:我忘了提到在本例中应该使用<code>search()</code>方法,而不是<code>match()</code>。<code>match()</code>仅当在输入的最开始处找到匹配项时才起作用,就像添加了起始锚点一样(例如<code>^".*"</code>)。<code>search()</code>执行更传统的regex匹配,匹配可以出现在输入的任何地方。(<a href="http://docs.python.org/library/re.html#module-contents" rel="nofollow">ref</a>)</p>