如何用Python正则表达式提取各ID对应的多行推文文本?
提取对应ID的多行推文文本的Python正则解决方案
已知已成功提取ID列表 ['ID123', 'ID234', 'ID345', 'ID456'],需要匹配对应多行推文文本,期望结果为 ['ABC\nDEF\nGHI', 'ABC\nDEF\nGHI', '#@ABC\nDEF\nGHI@.[]', 'google.com\n123456789']。以下是可行的正则方案:
核心思路
假设输入文本结构为「ID + 换行 + 多行推文 + 换行 + 下一个ID」(或文本结尾),通过正向预查限定推文的结束边界,结合非贪婪匹配捕获完整的多行内容。
代码实现
import re # 替换为你的实际输入文本 input_str = """ID123 ABC DEF GHI ID234 ABC DEF GHI ID345 #@ABC DEF GHI@.[] ID456 google.com 123456789""" # 正则模式:匹配ID及对应的多行推文 pattern = r'(ID\d+)\n(.*?)(?=\nID\d+|\Z)' # 启用re.DOTALL让.匹配换行符 matches = re.findall(pattern, input_str, re.DOTALL) # 转成ID-推文映射字典,方便按ID查找 tweet_map = {id_val: tweet_content for id_val, tweet_content in matches} # 目标ID列表 target_ids = ['ID123', 'ID234', 'ID345', 'ID456'] # 获取对应推文列表 result = [tweet_map[id_] for id_ in target_ids] print(result) # 输出:['ABC\nDEF\nGHI', 'ABC\nDEF\nGHI', '#@ABC\nDEF\nGHI@.[]', 'google.com\n123456789']
正则模式拆解
(ID\d+):捕获ID字符串(匹配ID开头+连续数字)\n:匹配ID与推文之间的换行分隔符(.*?):非贪婪匹配任意字符(包括换行,因re.DOTALL启用),完整捕获多行推文内容(?=\nID\d+|\Z):正向预查,限定推文结束位置为「下一个ID的换行开头」或「文本末尾」,避免误匹配到下一个ID
适配调整提示
- 如果ID和推文的分隔符不是单纯换行(比如有特定标记),直接替换正则中的
\n为实际分隔符即可 - 若输入存在重复ID,字典会保留最后一个匹配的推文,可根据需求修改为列表存储所有匹配结果
内容的提问来源于stack exchange,提问作者mnm
相关产品推荐
相关产品推荐

