Power Query:从内部有很多引号的长字符串中提取包含引号的子字符串

Posted

技术标签:

【中文标题】Power Query:从内部有很多引号的长字符串中提取包含引号的子字符串【英文标题】:Power Query: Extract substring containing quotation marks from a long string with many quotation marks inside 【发布时间】:2018-05-21 23:48:44 【问题描述】:
"c": "4343434", "d": "m", "k": "+la+la", "l": "40990", "m": "b", "n": "o",
"p": "adposition", "s": "b", "dm": "devicemodel", "adc": "creative", 
"adg": "454554545454", "src": "hahahah45", "tid": "kwd-utututututu", 
"utm_term": "+ka +ka", "utm_medium": "cpc"

我正在尝试将 "s":"b" 部分提取到 Power Query 查询中的新列中。我知道这归结为转义,并且我已经阅读了 M 公式语言的官方文档,但我只是不知道如何仅使用文本公式来提取它。我该怎么做?

【问题讨论】:

提取你想要的片段的规则是什么? "adposition", "devicemodel" 之间的所有内容? @alexisolson - 嗨,不是真的,我只需要 s 是什么,在这种情况下 s 是 b,所以基本上如果我能得到 "s": "b" 结果会很好够了 【参考方案1】:

@ShiYang 有需要的关键功能。

如果您有一个表,其中有一个名为 Text 的列,其中每一行都有您帖子中的文本,那么您可以编写一个自定义列,使用以下公式提取属于 s 的值:

= Json.Document([Text])[s]

这会将[Text] 列中的文本读取为JSON,然后提取s 组件。


完整的步骤代码如下所示:

= Table.AddColumn(#"Preveious Step", "Custom", each Json.Document([Text])[s])

【讨论】:

效果很好。你是救生员!你在这里真的教会了我一些东西,非常感谢。【参考方案2】:

可以使用Json.Document来解析Json。

let
    Source = """c"": ""4343434"", ""d"": ""m"", ""k"": ""+la+la"", ""l"": ""40990"", ""m"": ""b"", ""n"": ""o"", ""p"": ""adposition"", ""s"": ""b"", ""dm"": ""devicemodel"", ""adc"": ""creative"", ""adg"": ""454554545454"", ""src"": ""hahahah45"", ""tid"": ""kwd-utututututu"", ""utm_term"": ""+ka +ka"", ""utm_medium"": ""cpc""",
    Result = Json.Document(Source)[s]
in
    Result

【讨论】:

这看起来不错,但我需要它作为现有查询中的新列,查询中发生的事情不仅仅是提取它,它应该只是导致新列的步骤之一.不过感谢您的最后回复!

以上是关于Power Query:从内部有很多引号的长字符串中提取包含引号的子字符串的主要内容,如果未能解决你的问题,请参考以下文章

power query怎样设置M函数的字符区间

结构成员的长列表

使用 Power Query 从 Excel 缩进中提取层次结构

power query插件应用案例(二)

Power Query - 删除包含小写字母的文本字符串

Power BI 中的 M(Power Query),将参数从列表传递到 SQL 语句