如何创建针对特殊字符的智能分割正则表达式?
解决方案
正则思路
要实现你的需求,核心是区分"数字间的标点"和"需要分割的标点",同时保留需要分割的特殊字符作为独立元素。可以通过**反向预查(?<!...)和正向预查(?!...)**排除数字间的逗号/句号,再用捕获组保留分割符,最后过滤空结果。
最终正则代码
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
相关产品推荐
相关产品推荐

