擅长:python、mysql、java
<p>好吧,让我们从你犯的错误开始。你知道吗</p>
<ul>
<li><p>您创建了一个无限循环,它不会在文件末尾中断。</p></li>
<li><p>您将模式与文本行(您混淆地称之为<code>pattern</code>)进行比较。这两个是非常不同的东西;一个是类型<code>str</code>,另一个是类型<code>_sre.SRE_Pattern</code>。试着<code>'abc' == re.compile(r'^[A,a].')</code>看看我在说什么。你应该<a href="https://docs.python.org/2/library/re.html#re.compile" rel="nofollow">to use the pattern in a search/match instead</a>。</p></li>
</ul>
<p>你也在一次读一行,同时你可以在每行的开头进行模式搜索。你知道吗</p>
<pre><code>pattern = re.compile(r'^[A,a].*', re.MULTILINE)
</code></pre>
<p>如果存在<code>re.MULTILINE</code>,则符号<code>^</code>在文件开头和每一新行开头搜索模式。<code>.*</code>只与行的其余部分匹配。点是一个通配符,表示一个字符,带它的星号表示行中的任意多个字符。我添加了这两个字符,所以您可以提取整行。如果你不在乎台词是怎么说的,也不在乎有多少符合你的模式,你可以放弃它们。总而言之,这应该行得通。你知道吗</p>
<pre><code>import re
with open('englishsorted.txt') as f:
data = f.read()
pattern = re.compile(r'^[A,a].*', re.MULTILINE)
matches = re.findall(pattern, data)
print len(matches)
</code></pre>