我想知道是否有人可以帮助我。
我正在尝试从以下数据集中提取以下信息:
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
有人可以告诉我,有没有办法从这里删除双引号。
非常感谢和亲切的问候
克里斯
答案 0 :(得分:1)
在正则表达式中,我可以看到\&#34;什么splunk对待&#34; (使用\来抑制&#34;的特殊含义),以便它们进入输出。
答案 1 :(得分:0)
我不知道什么是splunk,但肯定它必须有某种JSON解析库(如果不是内置函数)。除了正则表达式之外,这通常是做这些事情的更好方法。
我会更直接地回答您的问题,但仅以帮助您了解正则表达式。捕获组是(?<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="\"(.*?)\""