如何使用非贪婪正则表达式提取Markdown中跨多行的json标签内容
解决方案
你可以使用开启了单行模式的非贪婪匹配正则实现需求,可用的正则表达式如下:
(?s)\[json]:#\s*\(.*?\)
正则说明
(?s):开启单行匹配模式,让元字符.可以匹配换行符,适配多行json标签的场景\[json]:#:精准匹配Markdown注释的固定开头标识\s*:兼容开头标识和左括号之间可能存在的空格、换行\(:匹配json内容的起始左括号.*?:非贪婪匹配任意字符,会在命中第一个右括号\)时停止匹配,避免跨标签捕获\):匹配json内容的结束右括号
使用示例
替换你原有代码中的正则即可:
# 提取所有json标签 ($md | Select-String '(?s)\[json]:#\s*\(.*?\)' -AllMatches).Matches.Value # 提取第2个json标签(索引从0开始计数) ($md | Select-String '(?s)\[json]:#\s*\(.*?\)' -AllMatches).Matches[1].Value
如果你需要直接提取标签内的纯json内容,只需要添加捕获组即可,正则修改为:
(?s)\[json]:#\s*\((.*?)\)
提取纯json的示例:
# 提取第2个标签内的json字符串 ($md | Select-String '(?s)\[json]:#\s*\((.*?)\)' -AllMatches).Matches[1].Groups[1].Value
你拿到纯json字符串后就可以直接用ConvertFrom-Json命令解析成PowerShell对象做后续处理。
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

