正则表达式 Return 除双引号外的所有内容

Regex Return Everything Except for Double Quotes

不知是否有人可以帮助我。

我正在尝试从下面的数据集中提取以下信息:

1 条街,一个镇,GB

{"matchingDataset":{"surnames":[{"value":"Smith","verified":true}],"gender":{"value":"MALE","verified":true},"dateOfBirth":{"value":"1973-12-26","verified":true},"firstName":{"value":"John","verified":true},"addresses":[{"verified":true,"postCode":"AB1 1BC","lines":["1 A Street","A Town","GB"]}],"middleNames":{"value":"john","verified":true}},"hashedPid":"123","matchId":"_123","levelOfAssurance":"LEVEL_2"}

我整理了以下正则表达式:

"\"lines\":\[\"(?<idaAddress>[^\]]+)"

我遇到的问题是 returns:

1条街","A Town","GB

有人能告诉我有没有办法从中删除双引号。

非常感谢和亲切的问候

克里斯

在正则表达式中,我可以看到 \" which splunk treat as "(使用 \ 来抑制 " 的特殊含义)所以它们会出现在输出中。

我不知道 splunk 是什么,但它肯定有某种 JSON 解析库(如果不是内置函数的话)。这通常是比正则表达式更好的方法。

我会更直接地回答您的问题,但只是为了帮助您理解正则表达式。捕获组是 (?<idaAddress>[^\]]+)"1 A Street" 开头的 " 与正则表达式中的 \" 匹配,因此捕获组在它之后立即开始匹配。如果您这样做:"\"lines\":\[(?<idaAddress>[^\]]+)" 那么字符串中的 " 将作为 [^\]]+ 部分的一部分进行匹配。或者实际上 "\"lines\":\[(?<idaAddress>\"[^\]]+)" 也会使 " 在捕获组内匹配。

至于字符串的结尾,我能想到的唯一解释是结尾的 "\" 的作用相同(即您实际上不需要\)。因此,如果您删除结尾的 "(或将其移动到捕获组内),那么结尾的 " 将按预期被捕获。但这只是一个有根据的猜测。

我真的不知道这个 splunk 是如何工作的,但你可以分两个阶段来完成:

1- 使用以下正则表达式捕获引用的表达式 "1 A Street", "A Town", "GB"

\"lines\":\[(?<idaAddress>[^\]]+)

2- 然后使用此正则表达式捕获令牌内引号之间的值:

\"(.*?)\"

我不知道标记的编程语言是用来做什么的,但我认为这组指令不会有太大区别:

regex _raw="\"lines\":\[(?<idaAddress>[^\]]+)"
regex idaAddress="\"(.*?)\""