1
import re
sum=0
file = open("pro.txt").readlines()
for lines in file:
        word= len(re.findall('(^|[^\w\-])able#1(?=([^\w\-]|$))', lines))
        if word>0:
                sum=sum+1
print sum

我正在计算文本文件中的单词数,但我的程序也计算了一些我们不需要的单词,我在其中使用了 re,但它没有给我任何适当的帮助这是我的文本文件

0         6          9     able#1
0         11         34    unable#1
9         12         22    able#1
0         6          9     able#1-able#1
0         11         34    unable#1*able#1

我不想让我的程序计算,-able#1 ,able#1-able#1 ,unable#1*able#1这些类型的词,我应该只计算able#1

4

3 回答 3

1

您可以使用\sable#1\s*$前面需要一个空格able并在行尾允许零个或多个空格(仅此而已)的正则表达式。

import re
regex = re.compile(r'\sable#1\s*$')
count = 0
with open("pro.txt") as file:
    for line in file:
        if regex.search(line):
            count += 1
print count

你也可以用sum()一个像这样的生成器表达式来计数:

with open("pro.txt") as file:
    count = sum(1 for line in file if regex.search(line))
于 2013-02-26T08:24:10.303 回答
0
[^\W]*able#1\W

[^\W]* 表达式表示匹配零个或多个非字母数字字符因此它不会关心“unable”中的“un”!

我会这样写正则表达式

if re.search('\s+[-_]*able#\S*',lines):

\s+是任何非零数量的空白 \S*是任何数量的空白,包括零

编辑:更改后期要求更改以匹配“_able#”和“-able#”

于 2013-02-25T16:11:35.787 回答
0

如果您只对计算完整单词感兴趣,可以这样做:

re.findall('(?:\W|\A)able#1(?=\W|\Z)', line)

(?:\W|\A)匹配开头line或不类似于单词的内容(即[0-9a-z_])。

同样,是对结尾或不像单词的东西的(?=\W|\Z)前瞻断言。line

于 2013-02-26T09:07:02.920 回答