Regex 正则表达式:如何忽略行的其余部分

Regex 正则表达式:如何忽略行的其余部分,regex,Regex,我有这样的输入(JSON格式) {“地点”:[{“id”:“1BCDEFGHIJKLM”,“somename”:“abcd”,“fewname”:“xyzland”,“sid”:“sname”:“regionname”:“Zee整体”,“type”:“some”:“some”,“siteCode”:“someCode”:“ROTXY”,“fewCode”:“NL”,“pCode”:“ROTXY”,“someid”:“1BCDEFGHIJKLM”,“fewid”:“GIC8”},{“id”:“78

我有这样的输入(JSON格式)

{“地点”:[{“id”:“1BCDEFGHIJKLM”,“somename”:“abcd”,“fewname”:“xyzland”,“sid”:“sname”:“regionname”:“Zee整体”,“type”:“some”:“some”,“siteCode”:“someCode”:“ROTXY”,“fewCode”:“NL”,“pCode”:“ROTXY”,“someid”:“1BCDEFGHIJKLM”,“fewid”:“GIC8”},{“id”:“7823XYZHMOPRE”,“somename”:“abcd连接”,“fewname”:“美国”,“sid”:“sname”:“regionname”:“regionname”:”“纽约”、“键入”:“某些”、“站点代码”:“someCode”:“USRTJ”、“fewCode”:“US”、“pCode”:“USNWK”、“someid”:“7823XYZHMOPRE”、“fewid”:“7823XYZHMOPRE”}、{“id”:“799XYZHMOPRE”、“somename”:“Maasvlakte”、“fewname”:“xyzland”、“sid”:“sname”:“地区名称”:“Zee整体”、“类型”:“一些”、“站点代码”:“someid”:“someCode”:“NL”、“pCode”:“somename”:“799XYZHMOPRE”:“NL”:“pCode”:”“,“fewid”:“OIUOWER348534”}]}

现在,我想使用正则表达式获取第一个“id”值,即1BCDEFGHIJKLM。我已经通过使用


[^({“location”:[?{“id”:”)].{0,12}但这是不完整的。有人能帮助我忽略值1BCDEFGHIJKLM之后的行的其余部分吗?Regex不是这样做的。无论您使用什么平台,它都必须有JSON解析器。 这将是您最好的无错误解决方案


假设您必须使用正则表达式,您可以使用
“id”:“(.*?”
”获取所有id,并进行第一次匹配


我发现以下内容可能会对您有所帮助。

虽然很混乱,但您的正则表达式怎么会不完整

它可以缩短为(“id:”([^“]+)”),这样可读性更强,并且不会将id限制为12个字符

如果您的问题是得到多个结果,大多数语言都有一个“g”全局开关

在javascript中,以下内容将返回“1BCDEFGHIJKLM”:


As match()返回一个数组,其中[0]是返回的整个字符串,[1]是第一个parenthasis。

不必使用正则表达式。在您喜欢的语言中,使用逗号拆分。然后检查每个项目,检查“id”并在冒号(:)上拆分。获取最后一个元素。例如Python

>>> s
'{"location":[{"id":"1BCDEFGHIJKLM","somename":"abcd","fewname":"xyzland","sid":"","sname":"","regionname":"Zee-Whole","type":"some","siteCode":"","someCode":"ROTXY","fewCode":"NL","pCode":"ROTXY","someid":"1BCDEFGHIJKLM","fewid":"GIC8"},{"id":"7823XYZHMOPRE","somename":"abcd Junction","fewname":"United States","sid":"","sname":"","regionname":"New York","type":"some","siteCode":"","someCode":"USRTJ","fewCode":"US","pCode":"USNWK","someid":"7823XYZHMOPRE","fewid":"7823XYZLMOPRE"},{"id":"799XYZHMOPRE","somename":"abcd-Maasvlakte","fewname":"xyzland","sid":"","sname":"","regionname":"Zee-Whole","type":"some","siteCode":"","someCode":"XYROT","fewCode":"NL","pCode":"","someid":"799XYZHMOPRE","fewid":"OIUOWER348534"}]}'

>>> for i in s.split(","):
...     if '"id"' in i:
...         print i.split(":")[-1]
...         break
...
"1BCDEFGHIJKLM"

当然,理想情况下,您应该使用专用的JSON解析器。

您使用哪种语言编写代码?使用专用的JSON解析器库不是更有意义吗?您的解决方案在哪些方面不完整?一些文本编辑器具有内置的解析器,因此我仍然认为他使用了错误的工具来完成此工作。我从JMeter处获得此输入作为响应nse。我需要这个特定的值作为另一个http请求的输入。这基本上是访问URL的响应。我的意思是你如何解析它?我从来没有使用过JMeter,但我假设你得到某个文件的结果,然后解析它,或者它包含在某个应用程序中。JMeter中内置了一个RegExp测试程序,可以用来测试常规表达式响应和/或请求数据中的授权
>>> s
'{"location":[{"id":"1BCDEFGHIJKLM","somename":"abcd","fewname":"xyzland","sid":"","sname":"","regionname":"Zee-Whole","type":"some","siteCode":"","someCode":"ROTXY","fewCode":"NL","pCode":"ROTXY","someid":"1BCDEFGHIJKLM","fewid":"GIC8"},{"id":"7823XYZHMOPRE","somename":"abcd Junction","fewname":"United States","sid":"","sname":"","regionname":"New York","type":"some","siteCode":"","someCode":"USRTJ","fewCode":"US","pCode":"USNWK","someid":"7823XYZHMOPRE","fewid":"7823XYZLMOPRE"},{"id":"799XYZHMOPRE","somename":"abcd-Maasvlakte","fewname":"xyzland","sid":"","sname":"","regionname":"Zee-Whole","type":"some","siteCode":"","someCode":"XYROT","fewCode":"NL","pCode":"","someid":"799XYZHMOPRE","fewid":"OIUOWER348534"}]}'

>>> for i in s.split(","):
...     if '"id"' in i:
...         print i.split(":")[-1]
...         break
...
"1BCDEFGHIJKLM"