0

我需要在 python 中创建一个程序来查看给定的文件。假设 acronyms.txt,然后返回多少行包含至少 1 个三字母缩写词的百分比值。例如:

NSW is a very large state.
It's bigger than TAS.
but WA is the biggest!

阅读此内容后,它应该返回 66.7%,因为 66.7% 的行包含三个字母的首字母缩写词。如您所见,它也被四舍五入到小数点后一位。我对正则表达式不是很熟悉,但我认为正则表达式最简单。

编辑:

我已经完成了代码,但我需要它来识别它们之间带有点的首字母缩略词,EG NSW 应该被识别为首字母缩略词。我该怎么做呢?

任何帮助,将不胜感激!

4

2 回答 2

3

你可以做:

import re
cnt = 0
with open('acronyms.txt') as myfile:
    lines = myfile.readlines()
    length = len(lines)
    for line in lines:
        if re.search(r'\b[A-Z]{3}\b', line) is not None:
            cnt += 1

print("{:.1f}%".format(cnt/length*100))

r'[A-Z]{3}'连续匹配三个(且仅三个)大写字母。如果找到搜索,那么我们添加一个计数。

然后我们只需将计数除以行的长度,然后打印结果,如您所示。

于 2013-08-17T11:09:26.007 回答
2

您可以执行以下操作:

total_lines = 0
matched_lines = 0
for line in open("filename"):
    total_lines += 1
    matched_lines += bool(re.search(r"\b[A-Z]{3}\b", line))
print "%f%%" % (float(matched_lines) / total_lines * 100)

注意搜索模式中的 '\b' - 它匹配word 开头或结尾的空字符串。它可以帮助您防止与超过 3 的首字母缩略词('asdf ASDF asdf')或单词中的首字母缩略词('asdfASDasdf')匹配。

于 2013-08-17T11:19:08.200 回答