You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则基于月份缩写分割文本并提取对应内容?

解决提取月份缩写开头文本块的问题

我懂你现在的需求——就是要从那段带换行的文本里,把每个以月份缩写(apr、may、jan这类)开头的完整段落块提取出来,对吧?你之前用贪婪匹配的正则没搞定,那咱们来捋清楚怎么实现。

问题分析

每个目标块的特征很明确:

  • 开头是指定的月份缩写(比如apr、may、jan)
  • 内容会跨换行,一直到下一个月份缩写的前一刻,或者文本的结尾

之前用贪婪匹配.*会直接从第一个月份缩写匹配到文本末尾,这显然不是你想要的,所以得用非贪婪匹配加上边界判断。

正确的实现代码

直接上能跑的代码,注释里会讲清楚每个部分的作用:

import re

# 你的输入文本
text = "apr25, 2016\nblah blah\npow\nmay22, 2017\nasdf rtys\nqwer\njan9, 2018\npoiu\nlkjhj yertt"

# 定义正则:匹配指定月份缩写开头的块,直到下一个月份缩写或文本结束
# 可根据需要扩展月份缩写(比如加feb、jun等)
month_pattern = re.compile(r'(apr|may|jan).*?(?=(apr|may|jan)|$)', re.DOTALL)

# 提取所有匹配的块
result = [match.group(0) for match in month_pattern.finditer(text)]

# 打印结果看看
print(result)

正则解释

咱们拆解一下这个正则的关键部分:

  • (apr|may|jan):指定要匹配的月份缩写,作为每个块的起始标记;如果需要支持更多月份,直接在这里添加缩写就行,比如(apr|may|jan|feb|jun)
  • .*?:非贪婪匹配任意字符,这样不会一口气吞掉所有内容,而是匹配到下一个边界就停止
  • (?=(apr|may|jan)|$):正向预查,用来确定匹配的结束边界——要么遇到下一个月份缩写,要么到文本末尾,这样就能精准切割每个块
  • re.DOTALL:这个参数必须加!因为默认情况下.不会匹配换行符,加了它之后,.就能处理跨换行的内容了

运行结果

执行代码后,输出正好是你期望的格式:

[
    "apr25, 2016\nblah blah\npow\n",
    "may22, 2017\nasdf rtys\nqwer\n",
    "jan9, 2018\npoiu\nlkjhj yertt"
]

内容的提问来源于stack exchange,提问作者user1290793

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:21:47