VB.net字符串拆分得到第一个值

时间:2015-03-24 23:32:38

标签: vb.net string

我正在使用一个字符串,它始终具有"产品1:" 在里面。我想获得"产品1:"之后的价值。以下是字符串

的一些示例
  

Hello UserName产品1:阿尔卡特产品2:三星卡车:联邦快递   结局:加拿大

     

您好用户名产品1:诺基亚卡车:联邦快递结束:加拿大

     

Hello UserName产品1:阿尔卡特产品2:三星产品3:诺基亚   卡车:加拿大邮政结束:巴西

     

Hello UserName产品1:阿尔卡特-55特别产品2:三星   产品3:诺基亚卡车:加拿大邮政结束:巴西

     

Hello UserName产品1:三星Galaxy S6-33卡车:加拿大邮政   结局:巴西

我正在寻找的字符串:

  • 阿尔卡特
  • NOKIA
  • 阿尔卡特
  • 阿尔卡特55
  • 三星Galaxy S6-33

我有点运气

sMessage.Split("Product 1:")(1).Split(":")(1)

但是上面的代码我还是得到了

  • 阿尔卡特
  • 诺基亚卡车
  • 阿尔卡特
  • 阿尔卡特55
  • 三星Galaxy S6-33卡车

2 个答案:

答案 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 xTruck,则需要将其添加到正则表达式(或替换)。

修改

更新了正则表达式,使其更符合分隔词:

(?<=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”的捕获组,如下所示:

  • 阿尔卡特
  • NOKIA
  • 阿尔卡特
  • 阿尔卡特-55特别
  • 三星Galaxy S6-33