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

如何创建针对特殊字符的智能分割正则表达式?

解决方案

正则思路

要实现你的需求,核心是区分"数字间的标点"和"需要分割的标点",同时保留需要分割的特殊字符作为独立元素。可以通过**反向预查(?<!...)和正向预查(?!...)**排除数字间的逗号/句号,再用捕获组保留分割符,最后过滤空结果。

最终正则代码

import re

# 定义正则:捕获需要分割的特殊字符,排除数字间的逗号和句号
reg = re.compile(r'((?<!\d),(?!\d)|(?<!\d)\.(?!\d)|[^A-Za-z\d\' ôöàçèéêëïâîÀÁÂÄÅÃÆÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝYüÜÚúÙùÛû ])')

# 测试输入文本
input_text = "J'aime coder avec python 3.7, et 3,8. c'est dûr de coder avec 3.9!"
# 分割并过滤空字符串
result = [item.strip() for item in reg.split(input_text) if item.strip()]

print(result)

正则各部分解释

  • (?<!\d),(?!\d):匹配逗号,但逗号前面不是数字且后面不是数字(排除"12,3"这类情况)
  • (?<!\d)\.(?!\d):匹配句号,但句号前面不是数字且后面不是数字(排除"12.3"这类情况)
  • [^A-Za-z\d\' ôöàçèéêëïâîÀÁÂÄÅÃÆÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝYüÜÚúÙùÛû ]:匹配所有不在「字母、数字、单引号、法语特殊字符、空格」范围内的特殊字符(比如感叹号)
  • 整个表达式放在捕获组()中,这样re.split会把分割符也保留在结果列表里

测试结果

运行代码后,输出与你期望的一致:

["J'aime coder avec python 3.7", ",", "et 3,8", ".", "c'est dûr de coder avec 3.9", "!"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:50:36