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

时间:2015-10-03 15:08:49

标签: regex splunk

我想知道是否有人可以帮助我。

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

1 A Street,A Town,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>[^\]]+)"

我遇到的问题是返回:

1 A Street“,”A Town“,”GB

有人可以告诉我,有没有办法从这里删除双引号。

非常感谢和亲切的问候

克里斯

3 个答案:

答案 0 :(得分:1)

在正则表达式中,我可以看到\&#34;什么splunk对待&#34; (使用\来抑制&#34;的特殊含义),以便它们进入输出。

答案 1 :(得分:0)

我不知道什么是splunk,但肯定它必须有某种JS​​ON解析库(如果不是内置函数)。除了正则表达式之外,这通常是做这些事情的更好方法。

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

至于字符串的结尾,我能想到的唯一解释是最后的"\"的工作方式相同(即你实际上并不需要\ 1}})。因此,如果您删除结束"(或在捕获组内移动它),则将按预期捕获结尾"。但这只是一个有根据的猜测。

答案 2 :(得分:-1)

我真的不知道这个splunk的东西是如何起作用的,但你可以分两个阶段来做到这一点:

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

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

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

\"(.*?)\"

我不知道用于标记的编程语言是什么,但我认为这组指令与此不会有太大的不同:

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