【问题标题】:Azure Data Explorer, Kusto: Replace regex questionAzure 数据资源管理器,Kusto:替换正则表达式问题
【发布时间】:2021-08-02 09:09:22
【问题描述】:

根据documentation,我们可以使用replace_regex() 对字符串进行复杂的替换。 我想将 json-field 键中的第一个字母更改为小写。这就是我的代码的样子

let example = @'{"Id":"00000","Categories":[{"Position":208, "CategoryId":"XXX"}]}';
print(replace("\"([^\"]+?)\"\\s*:", @'\l\1', example))

它不起作用,因为我无法在替换模式中做任何有意义的事情。

replace("\"([^\"]+?)\"\\s*:", tolower(@'\0'), example)

replace("\"([^\"]+?)\"\\s*:", (@'tolower(\0)'), example)

也不行。

rewrite:由matchingRegex 进行的任何匹配的替换正则表达式。 使用 \0 表示整个匹配,\1 表示第一个捕获组,\2 以此类推,用于后续的捕获组。

我们可以使用匹配(\0、\1、\2)而不只是像示例中那样连接吗?

【问题讨论】:

    标签: regex azure-data-explorer kql


    【解决方案1】:

    这不太可能与正则表达式有关。 可以使用以下查询来完成部分解决方案(更改 1 级键):

    let example = parse_json(@'{"Id":"00000","Categories":[{"Position":208, "CategoryId":"XXX"}]}');
    print x=example
    | mv-apply kvp = example on
    (
        mv-expand kind=array kvp
        | project k = tolower(kvp[0]), v=kvp[1]
        | summarize x=make_bag(pack(k, v))
    )
    

    【讨论】:

    • 谢谢!但是,如果我们不仅考虑键,我们就不能用正则表达式替换做一些复杂的事情,可以吗?
    • 如果您需要两个键/值 - 您可以在整个字符串上调用 tolower() (它不应该影响 json 解析)。正则表达式替换不允许对被替换的字符串运行 labmda 转换(从某种意义上说,这就是你想要的:在 \1 上应用 tolower())
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多