使用正则表达式如何在字符串中提取多个子字符串?
假设我们有这个
resgrp / providers / Microsoft.Storage / storageAccounts / vvvvvdgdevstor“,”主题“:” / blobServices / default / containers / coloradohhhhready / blobs / README _.._。hl7“,” eventType“:” Microsoft.Storage.BlobCreated “,” eventTime“:” 2019-06-19T17:28:40.3136657Z“,” id“:” 604ad6c5a0145-04c4-26bsssss26a“,” data“:{” api“:” PutBlockList“,” clientRequestId“:” aaaaaaae -4e68-95f6-c1ssssb02f“
我想要的结果是:
/coloradohhhhready/README_.._.hl7
我尝试过的是:
(?i)(?<=\/containers\/)(.*)(?=\/blobs\/)(.*)(?<=\/blobs\/)(.*)(?=","eventtype)
哪个产生了:
coloradohhhhready / blobs / README _.._。hl7
我只想删除该字符串内的/blobs/
段:
答案 0 :(得分:2)
如果您始终希望删除/blobs/
,则只需将整个内容替换为/
。
另一方面,将您的解决方案粘贴到Regex101上显示,您的epxression的匹配项会产生3个组,其中一个是/blobs/
。因此,在您的情况下,就像通过执行"/" + Group[1].Value + "/" + Group[3].Value
来重建另一个字符串一样简单。
答案 1 :(得分:2)
如果您想使用正则表达式进行匹配,则可以使用2个捕获组并进行匹配,而不是使用中间,/blobs
前后的环顾四周。
在捕获组(/[^/]+)
中,匹配正斜杠,然后不匹配/
您的值属于捕获组1和组2。
(?i)(?:/containers)(/[^/]+)/blobs(/[^"/]+)(?:","eventtype")
答案 2 :(得分:0)