在字符串中提取两个不同的子字符串

时间:2019-06-28 14:27:45

标签: regex

使用正则表达式如何在字符串中提取多个子字符串?

假设我们有这个

  

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/段:

enter image description here

3 个答案:

答案 0 :(得分:2)

如果您始终希望删除/blobs/,则只需将整个内容替换为/

另一方面,将您的解决方案粘贴到Regex101上显示,您的epxression的匹配项会产生3个组,其中一个是/blobs/。因此,在您的情况下,就像通过执行"/" + Group[1].Value + "/" + Group[3].Value来重建另一个字符串一样简单。

答案 1 :(得分:2)

如果您想使用正则表达式进行匹配,则可以使用2个捕获组并进行匹配,而不是使用中间,/blobs前后的环顾四周。

在捕获组(/[^/]+)中,匹配正斜杠,然后不匹配/

您的值属于捕获组1和组2。

(?i)(?:/containers)(/[^/]+)/blobs(/[^"/]+)(?:","eventtype")

Regex demo | .NET C# example

答案 2 :(得分:0)

我的猜测是,这个表达式

(?:\/blobs\/)|(.*?)

也许是一个开始的选择。

Demo