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

为何使用re.sub移除Tel:及后续内容时未匹配到字符串末尾?

问题原因与解决方案

嘿,我来帮你搞清楚这个问题~

你用re.sub('Tel:.*','',text)没能完全移除后续内容,核心原因是正则表达式中的.默认不匹配换行符!

你的原始文本里,Tel:后面除了电话号码,还有换行符、制表符,以及另一行的Cell:内容。而.*只能匹配到Tel:之后第一个换行符之前的内容,剩下的换行、制表符和Cell:部分自然就被保留下来了,这就是为什么结果没完全符合预期。

两种修复方法

  • 方法一:使用re.DOTALL标志
    这个标志会让.匹配包括换行符在内的所有字符,这样.*就能覆盖Tel:之后的所有内容了:

    import re
    text = 'John Doe Inc - Real Estate Brokers\n1234 Shaky Bridge Road, '\
    '\n Suite 123, \nDallas, TX 12345\n\nTel: 123-456-7890\n\t\t'\
    '\n\t\tCell: 234-567-8901'
    cleaned_text = re.sub('Tel:.*', '', text, flags=re.DOTALL)
    print(cleaned_text)
    
  • 方法二:用[\s\S]*替代.*
    [\s\S]表示匹配所有空白字符和非空白字符(也就是所有字符,包含换行),不需要额外加标志:

    cleaned_text = re.sub('Tel:[\s\S]*', '', text)
    

这两种方法都能帮你完全移除Tel:及之后的所有内容,只保留前面的地址部分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:29:26