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

Python使用re.split按多分隔符分割字符串报nothing to repeat错误

报错原因
  • 你传入的正则模式存在语法错误,根源是没有区分正则元字符和普通字符:
    • ?是正则内置的量词,作用是标记它前面的子表达式可匹配0次或1次,你直接将?写在模式的起始位置(位置0),它前面没有任何可作用的子表达式,正则解析器找不到要重复的匹配目标,直接抛出re.error: nothing to repeat at position 0异常。
    • .是正则内置的通配符,默认匹配除换行符外的任意单个字符,不会匹配你预期的普通英文句号。
  • 你先后尝试的"?|."、"? |. "两个模式都没有对上述特殊元字符做转义,解析器会将其识别为正则语法符号,而非你要匹配的问号、句号字面量。
正确实现方法

正则中要匹配有特殊含义的元字符本身,需要在字符前加反斜杠\做转义;多分隔符匹配可以用|分隔不同的匹配规则,也可以用字符组[]简化写法。

基础写法

仅按问号、句号拆分字符串:

import re

test_str = "How are you? I am talking to you. There?"
# 转义后匹配?或.字面量
res = re.split(r"\?|\.", test_str)
print(res)
# 输出:['How are you', ' I am talking to you', ' There', '']

用字符组可以简化写法,字符组内的?、.会失去特殊元字符含义,不需要额外转义:

res = re.split(r"[?.]", test_str)

优化写法(去除空值、前后空格)

如果不想要拆分结果里的空字符串、片段前导空格,可以把分隔符连带后面的空白字符一起匹配,最后过滤空值:

import re

test_str = "How are you? I am talking to you. There?"
# 匹配?/. + 后面任意数量的空白字符
res = [seg.strip() for seg in re.split(r"[?.]\s*", test_str) if seg]
print(res)
# 输出:['How are you', 'I am talking to you', 'There']

如果需要新增分隔符(比如感叹号、逗号),直接在字符组里追加即可,例如同时按? . ! ,拆分:

re.split(r"[?!.,]\s*", test_str)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:57:28