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*$前に1つの空白を必要とし、行末にable0個以上の空白を許可する正規表現を使用できます。

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]* 式は、英数字以外の 0 個以上の文字に一致することを意味するため、「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)

theは、の先頭または単語のようなものではないもの (つまり ) の(?:\W|\A)いずれかに一致します。line[0-9a-z_]

同様に、単語の末尾または何か(?=\W|\Z)の先読みアサーションです。line

于 2013-02-26T09:07:02.920 に答える