如何用成对分隔符拆分字符串?求M语言、DAX实现方案
提取字符串中所有成对分隔符内的内容(M语言+DAX方案)
M语言(Power Query)实现
不需要循环,通过列表转换即可批量提取所有[]内的内容,步骤如下:
- 按左括号
[拆分源字符串,得到包含目标片段的列表 - 移除列表中的空项
- 提取每个片段中右括号
]之前的内容 - 清理文本前后的空格
具体代码示例:
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
相关产品推荐
相关产品推荐

