为何使用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
相关产品推荐
相关产品推荐

