用正则表达式匹配诗句
最近MATLAB老师叫我们做一个习题生成器,然后语文的题目就从古诗中来选择,为了图方便,我就到网上整了一段爬虫,爬了唐诗三百首,可爬下来发现古诗都是带题目和作者的,不符合我做题的要求,所以我就简单写了一个正则表达式,把古诗里面的诗句都匹配出来。
爬下来的古诗是这样的:
行宫
唐代:元稹
寥落古行宫,宫花寂寞红。
白头宫女在,闲坐说玄宗。
登鹳雀楼
唐代:王之涣
白日依山尽,黄河入海流。
欲穷千里目,更上一层楼。
新嫁娘词
唐代:王建
三日入厨下,洗手作羹汤。
未谙姑食性,先遣小姑尝。
于是我就写了以下代码,将诗句匹配了出来:
import re
# 用于储存正则表达式匹配出来的诗句
f = open(r"F:\MATLAB_homemork\4_3\唐诗300首无题.txt",'w')
# pattern就是要匹配的正则表达式
# [\u4E00-\u9FA5] 表示汉字,因为唐诗有些是五言的,有些是七言的
# 所以后面就跟了个{5,7},表示可以匹配5-7个
pattern = r'[\u4E00-\u9FA5]{5,7},[\u4E00-\u9FA5]{5,7}'
# 这是要读取的文件
file = open(r"F:\MATLAB_homemork\4_3\唐诗300首.txt",encoding='UTF-8')
# 不断循环,直到没有诗句
while 1:
line = file.readline() # 按行读取
s = re.findall(pattern,line)
if len(s) : # 如果匹配到了
# 因为正则表达式返回的是一个列表,不能直接写入文件,所以我们要把里面的元素拿出来再写入文件
for m in s :
f.write(m) # 把返回的字符串写入f中
f.write('\n') # 每写入一句就换行
if not line:
break
pass
file.close()
匹配出来的古诗是这样子的:
寥落古行宫,宫花寂寞红
白头宫女在,闲坐说玄宗
白日依山尽,黄河入海流
欲穷千里目,更上一层楼
三日入厨下,洗手作羹汤
未谙姑食性,先遣小姑尝
咱们就把题目和作者去掉了,因为我这里不需要句号,要是需要句号的话,可以在pattern的最后加个句号。