【发布时间】:2016-08-13 06:39:55
【问题描述】:
我知道以前有人问过这个问题,但我无法得到任何我在工作中看到的答案。我有一个包含数千行的 JSON 文件,并且希望每次出现两个字符串时都简单地提取它们之间的文本(很多)。
作为一个简单的例子,我的 JSON 如下所示:
"customfield_11300": null,
"customfield_11301": [
{
"self": "xxxxxxxx",
"value": "xxxxxxxxx",
"id": "10467"
}
],
"customfield_10730": null,
"customfield_11302": null,
"customfield_10720": 0.0,
"customfield_11300": null,
"customfield_11301": [
{
"self": "zzzzzzzzzzzzz",
"value": "zzzzzzzzzzz",
"id": "10467"
}
],
"customfield_10730": null,
"customfield_11302": null,
"customfield_10720": 0.0,
所以我想输出“customfield_11301”和“customfield_10730”之间的所有内容:
{
"self": "xxxxxxxx",
"value": "xxxxxxxxx",
"id": "10467"
}
],
{
"self": "zzzzzzzzzzzzz",
"value": "zzzzzzzzzzz",
"id": "10467"
}
],
我试图让它尽可能简单 - 所以不要关心输出中显示的括号。
这就是我所拥有的(输出比我想要的多):
$importPath = "todays_changes.txt"
$pattern = "customfield_11301(.*)customfield_10730"
$string = Get-Content $importPath
$result = [regex]::match($string, $pattern).Groups[1].Value
$result
【问题讨论】:
-
为什么不将 JSON 解码为对象并直接寻址属性?
-
快速回答是 - 将您的贪婪捕获
(.*)更改为非贪婪 -(.*?)。应该这样做。 -
很高兴它有帮助。请随意在下面将我的答案标记为已接受。
标签: regex powershell