【正则表达式(三)】· Python

用正则表达式匹配诗句
最近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的最后加个句号。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值