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

LangChain中RegexTextSplitter无法导入,寻求正则分割文档的替代方案

LangChain中RegexTextSplitter无法导入,寻求正则分割文档的替代方案

我太懂你这种郁闷了——想导入RegexTextSplitter做正则文本分割,不管是从langchain.text_splitter还是新拆分出来的langchain_text_splitters里导都报错,看当前环境的分割器列表里也确实找不到它,甚至连官方文档还挂着旧的导入示例,这确实挺坑的。

其实这是LangChain版本迭代导致的:RegexTextSplitter在新版本里已经被移除或者重构了,部分旧文档没及时更新,才出现了文档和实际代码不匹配的情况。

不过不用慌,我们有两种靠谱的替代方案:

方案一:用RecursiveCharacterTextSplitter自定义正则分隔符

RecursiveCharacterTextSplitter本身就支持通过separators参数传入正则表达式列表,完全能实现正则分割的需求,而且它还自带递归分割、chunk大小控制这些实用功能。举个例子:

from langchain.text_splitter import RecursiveCharacterTextSplitter

# 这里可以替换成你需要的正则规则,比如按段落、特定符号分割
splitter = RecursiveCharacterTextSplitter(
    separators=[r"\n\n", r"\s{2,}", r"\."],  # 示例:按空行、两个以上空格、句号分割
    chunk_size=1000,  # 按需调整chunk大小
    chunk_overlap=150,  # 重叠部分避免上下文丢失
    length_function=len
)

# 分割你的文档
target_text = "这里是你需要分割的长文档内容..."
split_chunks = splitter.split_text(target_text)

方案二:基于TextSplitter实现自定义正则分割器

如果需要更定制化的正则分割逻辑,可以直接继承基础的TextSplitter类,自己实现一个专属的正则分割器,灵活性拉满:

from langchain.text_splitter import TextSplitter
import re

class CustomRegexSplitter(TextSplitter):
    def __init__(self, regex_pattern: str, **kwargs):
        super().__init__(**kwargs)
        self.regex_pattern = regex_pattern

    def split_text(self, text: str) -> list[str]:
        # 用正则分割文本
        raw_chunks = re.split(self.regex_pattern, text)
        # 过滤空字符串并清理多余空格
        return [chunk.strip() for chunk in raw_chunks if chunk.strip()]

# 使用示例:按三个以上的感叹号分割
splitter = CustomRegexSplitter(regex_pattern=r"!!!+")
split_chunks = splitter.split_text("第一段内容!!!第二段内容!!!!第三段内容")

这两种方案都能完美替代原来RegexTextSplitter的功能,其中方案一最省事,推荐优先尝试。

备注:内容来源于stack exchange,提问作者Dev_A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 18:45:28