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

如何用成对分隔符拆分字符串?求M语言、DAX实现方案

提取字符串中所有成对分隔符内的内容(M语言+DAX方案)

M语言(Power Query)实现

不需要循环,通过列表转换即可批量提取所有[]内的内容,步骤如下:

  1. 按左括号[拆分源字符串,得到包含目标片段的列表
  2. 移除列表中的空项
  3. 提取每个片段中右括号]之前的内容
  4. 清理文本前后的空格

具体代码示例:

let
    Source = "[Text1] [Text2] [Text3]", // 替换为你的源字符串
    SplitByOpenBracket = Text.Split(Source, "["),
    RemoveEmptyEntries = List.RemoveItems(SplitByOpenBracket, {""}),
    ExtractBeforeCloseBracket = List.Transform(RemoveEmptyEntries, each Text.BeforeDelimiter(_, "]")),
    CleanText = List.Transform(ExtractBeforeCloseBracket, each Text.Trim(_))
in
    CleanText

执行后会返回列表:{"Text1", "Text2", "Text3"},可直接加载为表格列。

DAX实现

DAX中可通过生成序列定位每个分隔对的位置,批量提取内容:

ExtractedBracketContent = 
VAR SourceStr = "[Text1] [Text2] [Text3]" // 替换为你的源字符串
VAR OpenBracketIndices = 
    FILTER(
        GENERATESERIES(1, LEN(SourceStr)),
        MID(SourceStr, [Value], 1) = "["
    )
VAR ItemCount = COUNTROWS(OpenBracketIndices)
VAR ResultTable = 
    ADDCOLUMNS(
        GENERATESERIES(1, ItemCount),
        "ExtractedText",
        VAR CurrentOpenPos = MAXX(FILTER(OpenBracketIndices, [Value] <= [Value]), [Value]) + 1
        VAR ClosePos = SEARCH("]", SourceStr, CurrentOpenPos) - 1
        RETURN TRIM(MID(SourceStr, CurrentOpenPos, ClosePos - CurrentOpenPos + 1))
    )
RETURN SELECTCOLUMNS(ResultTable, "提取的文本", [ExtractedText])

将此公式作为计算表创建后,会得到包含所有提取内容的单列表格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:22:53