使用正则表达式清理推文HTTP/HTTPS链接失败的技术求助
问题分析
你当前的核心问题是正则执行顺序错误:你先执行了re.sub(r'[^0-9A-Za-z \t]+', '', text),这个正则会把链接里的://、/等特殊字符全部删除,导致原本的链接被拆成纯字母数字串(比如https:/ /t.co/WfWWOukD9l/会被先处理成httpstcowfwwoukd9l),后续的链接清理正则自然无法匹配到有效链接格式。
另外,你提供的原始链接存在空格(https:/ /),常规的https?://\S+正则也无法匹配这种带空格的变形链接。
修复方案
- 调整正则执行顺序:先清理所有链接(包括带空格的变形链接),再执行特殊字符清理
- 优化链接匹配正则,覆盖带空格的情况
修改后的完整处理函数:
import re def cleantext(text): # 清理@用户名 text = re.sub(r'@[A-Za-z0-9]+', '', text) # 清理RT前缀 text = re.sub(r'RT[\s]+', '', text) # 清理话题标签# text = re.sub(r'#', '', text) # 清理所有链接(包括带空格的变形链接) text = re.sub(r'https?://?\s?/?\s?[^\s]+', '', text) # 兜底匹配残留的纯字母数字链接串 text = re.sub(r'\bhttp[s]?[a-zA-Z0-9]+\b', '', text) # 清理非字母数字、空格、制表符的字符 text = re.sub(r'[^0-9A-Za-z \t]+', '', text) # 转小写 text = text.lower() # 清理多余空格 text = re.sub(r'\s+', ' ', text).strip() return text
关键修改说明
- 调整步骤顺序:把链接清理放在特殊字符清理之前,确保链接在被破坏前就被完整匹配删除
- 适配带空格的链接:
https?://?\s?/?\s?[^\s]+可以匹配https:/ /t.co/WfWWOukD9l/这类变形链接 - 增加兜底规则:
\bhttp[s]?[a-zA-Z0-9]+\b可以匹配已经被部分处理的纯字母数字链接串,防止残留 - 新增多余空格清理,让文本格式更整洁
内容的提问来源于stack exchange,提问作者user21385645
相关产品推荐
相关产品推荐

