如何用正则从带时间戳的聊天字符串中提取says to后到时间戳前的文本
实现方案
你写的正则失效主要有两个原因:
- 没有兼容
says和to之间可能存在多个空格的情况(你的样本里就有says to的写法) - 没有把HTML标签作为结束边界,仅用换行、时间戳判断结束,和实际样本结构不符
你可以用更简单的匹配逻辑实现需求:先定位到says to片段,捕获后续所有不是<的字符(自动截止到下一个HTML标签前),再对捕获结果做空白规整即可,代码如下:
import re # 你的原始聊天字符串 string = """ (2021-07-04 11:58:43 PM BST)<br /> --- len (Tradition ) says to sen Hi yohan</p> <p>(2021-07-05 12:04:42 AM BST)<br /> --- len (Tradition) says to yohan okay -5 / 0 .</p> <p>(2021-07-04 11:47:14 PM BST)<br /> --- Ke Ch says to Hano hello</p> <p>(2021-07-05 12:09:41 AM BST)<br /> --- len says to yohan sen yes -5 / 0 TN -- / +2.5</p> <hr /> <hr /> Processed by wokl Archive for son malab | 2021-07-05 12:26:44 AM BST ---""" # 提取核心内容 raw_res = re.findall(r'says\s+to\s+([^<]+)', string) # 规整空格,去除首尾空白、合并中间多个空格 final_res = [' '.join(item.strip().split()) for item in raw_res] print(final_res)
运行输出:
['sen Hi yohan', 'yohan okay -5 / 0 .', 'Hano hello', 'yohan sen yes -5 / 0 TN -- / +2.5']
如果需要和你给出的预期输出完全对齐,只需要调整捕获组的边界规则,裁剪掉不需要的前后部分即可。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

