import operator
import re
# 1) 统计出文本中的单词的词频,找出词频最高和最低的单词及其词频,并输出。
# 这个是结果
result = {}
# 主函数入口
if __name__ == "__main__":
try:
f = open(r"文本解析器.txt", "r", encoding="UTF-8")
# 避免单词因为大小进行区分
content = f.read().lower()
# 找出所有单词
words = re.findall('[a-z]+', content)
# 利用字典特性进行统计
for word in words:
if word not in result:
result[word] = 1
else:
result[word] += 1
# 利用sort函数进行排序
result = sorted(result.items(), key=operator.itemgetter(1), reverse=True)
# 打印结果
print(result)
except BaseException as e:
print(e)
finally:
f.close()
下面是python 中 正则表达的re 模块
compile(pattern, flags = 0) 匹配任何可选的标记来编译正则表达式的模式,然后返回一个正则表达式对象
match(pattern, string, flags = 0) 使用带有可选标记的正则表达式的模式来匹配字符串。如果匹配成功,返回匹配对象,否则返回None
search(pattern, string ,flags = 0) 使用可选标记搜索字符串中第一次出现的正则表达式模式。如果匹配成功,则返回匹配对象,否则返回None
findall(pattern, string[,flags] ) 查找字符串中所有(非重复)出现的正则表达式模式,并返回一个匹配列表
finditer(pattern, string[,flags] ) 与findall()相同,但返回的是一个迭代器。对于每一次匹配,迭代器都能返回一个匹配对象
split(pattern, string, max = 0) 根据正则表达式的模式分隔符,split函数将字符串分割为列表,返回匹配列表,分割最多操作max次
group(num = 0) 返回整个匹配对象,或者编号为num的特定子组
例子:
import re
m = re.search('foo','asdasdfooasd')
#这里如果使用match将匹配不到任何字符串,因为match从第一个a开始匹配
if m is not None:
print(m.group())
regex = <(.*)>(.*)<\/(.*)>|<(.*)\/>
m = re.search(regex,"aa<a>aaaa</a>")
#一样只有search能匹配到标签
if m is not None:
print(m.group())