Python正则表达式如何按‘.’和‘and’多个分隔符分割字符串?
解决正则按
.和and分割字符串的问题 你的问题出在两个正则语法细节上:
.是正则的元字符,会匹配任意单个字符,而非字面意义的句号,必须转义成\.才能匹配真实的句号。- 原写法
.|and会被正则引擎解析为「匹配.,或者匹配a,或者匹配n,或者匹配d」,而非把and作为整体分割符。
正确实现代码
用非捕获分组把两个分割符包裹起来,同时处理分割符前后的空格,避免结果里出现多余空格:
import re sentence = "I want to eat fish and I want to buy a car. Therefore, I have to make money." # 正则说明:\s* 匹配前后空格;(?:...) 非捕获分组,避免分割结果包含分组内容;\.|and 匹配句号或and split_result = re.split(r'\s*(?:\.|and)\s*', sentence) # 过滤可能的空字符串(比如原句末尾的句号会产生空元素) split_result = [item for item in split_result if item] print(split_result)
执行后输出就是你期望的:['I want to eat fish', 'I want to buy a car', 'Therefore, I have to make money']
关键细节解释
(?:\.|and):用非捕获分组将两个分割符打包,确保正则引擎把\.和and当作两个独立的整体分割符,而非拆成单个字符。\s*:匹配分割符前后的任意空格,这样分割后的字符串不会带前导或尾随空格。- 最后过滤空字符串:如果原句子以句号结尾,split会生成一个空元素,用列表推导式去掉即可。
内容的提问来源于stack exchange,提问作者alryosha
相关产品推荐
相关产品推荐

