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

如何用正则提取跨多行的Date/Month至Per Cent的天气分段内容

解决跨多行天气块的正则匹配问题

嘿,我懂你遇到的这个正则坑!咱们一步步来拆解:

为什么之前的正则不行?

  1. 带^和$的正则没结果:re.MULTILINE模式下,^和$只匹配单行的开头和结尾,但你的每个天气块是跨多行的——开头的Date/Month在一行,结尾的Per Cent在另一行,所以整个块不可能同时满足^(行首)和$(行尾)的条件,自然匹配不到。

  2. 不带边界的正则匹配成大串:Date.+Cent用了贪婪的+量词,再加上re.DOTALL让.能匹配换行符,它会从第一个Date/Month开始,一直“吃”到最后一个Per Cent才停下,所以直接把所有块合并成了一个大字符串。

正确的正则写法

要精准拆分每个独立的天气块,关键是用非贪婪匹配,让正则在遇到第一个Per Cent就停止,而不是一直吃到最后一个。

基础版(适用于Date/Month不一定在行首的情况)

import re

result = re.findall(r'Date/Month.*?Per Cent', daily_forecast_text, flags=re.DOTALL)

严谨版(确保Date/Month是每个块的行首,避免误匹配中间的Date文本)

如果你的天气块确实都是以行首的Date/Month开头,加上^并配合re.MULTILINE更稳妥:

result = re.findall(r'^Date/Month.*?Per Cent', daily_forecast_text, flags=re.MULTILINE | re.DOTALL)

关键说明

  • .*?:非贪婪量词,会匹配尽可能短的内容,遇到第一个Per Cent就停止,刚好对应单个天气块的范围。
  • re.DOTALL:让.可以匹配换行符,这样跨多行的天气文本也能被覆盖。
  • re.MULTILINE:配合^使用时,会让^匹配每一行的开头,确保只抓那些真正作为块起始的Date/Month。

举个例子,假设你的文本是:

Date/Month 01/10
Cloudy with light rain
Humidity: 75 Per Cent
Date/Month 02/10
Sunny intervals
Humidity: 60 Per Cent

用上面的正则会得到两个独立的字符串,正好对应两天的天气数据,完美拆分!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:20:45