Python中按多字符组合分隔符分割字符串的问题咨询
问题根因
你代码出错的核心原因是正则表达式中的.是特殊元字符,默认匹配除换行符外的任意单个字符,你没有对它做转义处理,所以代码里的. \n\n|.\n\n不是匹配字面量的句号加换行组合,而是匹配「任意字符+空格+两个换行」或者「任意字符+两个换行」,才会把示例中Yes \n\n里的s被.匹配到,最终把Yes拆成了Ye。
修正方案
如果要匹配字面量的句号,需要用转义符\把.转义为\.,同时可以用?匹配可选的空格,简化正则写法:
import re text = 'Thanks.\n\n This is the first time. \n\n Yes \n\n indeed.' # \. 匹配字面量句号,? 表示前面的空格可选,覆盖两种分隔符场景 res = re.split(r'\. ?\n\n', text) print(res)
运行后输出结果和你预期一致:
['Thanks', ' This is the first time', ' Yes \n\n indeed.']
如果不需要拆分后每个元素开头的多余空格,遍历结果调用strip()处理即可。
支持问号、感叹号的拆分规则
可以实现按?|!|.加两个换行的规则拆分,把三种标点放到正则字符集[.!?]中即可:
# 直接拆分,会吃掉句尾的标点 res = re.split(r'[.!?] ?\n\n', text) # 如果需要保留句尾的标点,使用零宽后行断言,不会消耗标点字符 res = re.split(r'(?<=[.!?]) ?\n\n', text)
内容的提问来源于stack exchange,提问作者hao3 feng
相关产品推荐
相关产品推荐

