正则表达式 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="\"(.*?)\""
不知是否有人可以帮助我。
我正在尝试从下面的数据集中提取以下信息:
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="\"(.*?)\""