我正在使用一个字符串,它始终具有"产品1:" 在里面。我想获得"产品1:"之后的价值。以下是字符串
的一些示例Hello UserName产品1:阿尔卡特产品2:三星卡车:联邦快递 结局:加拿大
您好用户名产品1:诺基亚卡车:联邦快递结束:加拿大
Hello UserName产品1:阿尔卡特产品2:三星产品3:诺基亚 卡车:加拿大邮政结束:巴西
Hello UserName产品1:阿尔卡特-55特别产品2:三星 产品3:诺基亚卡车:加拿大邮政结束:巴西
Hello UserName产品1:三星Galaxy S6-33卡车:加拿大邮政 结局:巴西
我正在寻找的字符串:
我有点运气
sMessage.Split("Product 1:")(1).Split(":")(1)
但是上面的代码我还是得到了
答案 0 :(得分:1)
您可以使用以下内容替换不需要的值:
sMessage.Split("Product 1:")(1).Split(":")(1).Replace(" Truck", "")
您还可以将所需的字符串与正则表达式匹配:
(?<=Product 1: )((.*)(?= Product 2:)|(.*)(?= Truck:))
示例:
Dim regex As Regex = New Regex("(?<=Product 1: )((.*)(?= Product 2:)|(.*)(?= Truck:))")
Dim match As Match = regex.Match("Hello UserName Product 1: NOKIA Truck: Fedex Ending: Canada")
请注意,如果要删除的分隔符多于Product x
和Truck
,则需要将其添加到正则表达式(或替换)。
修改强>
更新了正则表达式,使其更符合分隔词:
(?<=Product 1: )((.*)(?= Product 2:)|(.*?)(?= \w+:)|.*)
现在它将匹配Product 2:
或任何其他或无分隔符。
修改2
更多简化:
(?<=Product 1: )((.*?)(?= \w+ ?(\d+)?:)|.*)
如果有一个多个数字的分隔符,例如Products 123:
,则最后一个正则表达式也会正确匹配。
答案 1 :(得分:0)
这假设你想要“产品1:”和下一个“标签”之间的值,在某些情况下是“产品2:”,在其他情况下是“卡车:”。请注意,这仅基于您提供的示例 - 如果您在“产品1:”之后显示其他“标记”,则需要进行调整。
以下正则表达式几乎可以满足您的要求
(?:Product 1:)(?<product>.+?)(?=(\sProduct 2:)|(\sTruck:))
使用该正则表达式,并给出您的示例文本,您将获得名为“product”的捕获组,如下所示: