如何实现按英文句号(.)分割文本但排除数字间的小数点?
如何用英文句号分割文本但排除数字间的小数点?
核心解决方案:用正则精准匹配句子结尾的句号
直接按.分割会误切数字里的小数点,需通过正则的反向断言和正向断言,只匹配作为句子分隔符的句号(即句号前不是数字,且句号后紧跟空格+大写字母或文本末尾)。
示例代码(Python)
import re original_text = "I paid 1.000 dollars. Very expensive. But I think today it should be cheaper." # 方法1:分割后补全句号 split_result = re.split(r'(?<![0-9])\.(?=\s[A-Z]|$)', original_text) final_result = [seg + '.' if seg.strip() else seg for seg in split_result] # 方法2:直接提取完整句子(更直观) final_result = re.findall(r'[^.]+(?<![0-9])\.|.+$', original_text) # 输出结果 for sentence in final_result: print(sentence.strip())
正则规则说明
(?<![0-9])\.:反向断言,确保句号前不是数字(排除数字间的小数点)(?=\s[A-Z]|$):正向断言,确保句号后紧跟空格+大写字母(句子开头)或文本末尾(最后一句)[^.]+(?<![0-9])\.:匹配以非数字结尾的句号为结束的完整句子|.+$:匹配文本最后一段(避免遗漏无句号的结尾内容)
其他语言适配逻辑
比如JavaScript中,可复用相同正则逻辑:
const originalText = "I paid 1.000 dollars. Very expensive. But I think today it should be cheaper."; const result = originalText.split(/(?<![0-9])\.(?=\s[A-Z]|$)/).map(seg => seg.trim() + '.'); console.log(result);
内容的提问来源于stack exchange,提问作者PPavesi
相关产品推荐
相关产品推荐

