使用Regex Python计算三个字母的首字母缩略词

时间:2013-08-17 11:02:10

标签: python regex python-3.x acronym

我需要在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 N.S.W应该被认为是首字母缩略词。我该怎么做?

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分: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}'连续匹配三个(且只有三个)大写字母。如果找到了搜索,那么我们会添加一个计数。

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

答案 1 :(得分: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' - 它匹配单词的开头或结尾的空字符串。它可以帮助您防止与长度超过3的缩写词('asdf ASDF asdf')或单词内的首字母缩略词('asdfASDasdf')发生意外匹配。