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

如何修改Python正则表达式,避免拆分拉丁学名实现按标点分句

解决Python正则按标点分割句子时误拆分拉丁学名的问题

原正则报错原因

你之前写的正则r'[,|(?:[^A-Z].)|?|!]'报错是因为两个核心问题:

  1. 字符集[]内部不能使用分组语法(?:...),括号会被当作普通字符导致不匹配;
  2. 字符集里的|完全多余,[]内的字符本身就是“或”的关系,不需要额外用|连接。

正确正则表达式

要避免拆分G. lucidum这类“大写字母+圆点”的拉丁学名,需要用负向回顾后发断言,确保分割用的句号前面不是大写字母,其他标点(逗号、问号、感叹号)正常分割。

最终可用的代码示例:

import re

strContent = "Many studies to date have described the anticancer properties of G. lucidum, which is a medicinal fungus. It shows promising anticancer effects!"
# 按标点分割,排除大写字母后的句号
split_result = re.split(r'(?<![A-Z])[.,?!]', strContent)
# 清理分割后空字符串和多余空格
cleaned_result = [s.strip() for s in split_result if s.strip()]
print(cleaned_result)

正则说明

  • (?<![A-Z]):负向回顾断言,匹配前面不是大写字母的位置,这样就跳过了拉丁学名里的句号;
  • [.,?!]:匹配作为句子分隔符的逗号、句号、问号、感叹号;
  • 如果需要同时匹配标点后的空格(比如. ),可以把正则改成r'(?<![A-Z])[.,?!]\s*',减少后续清理空格的步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:25:19