2015-03-24 134 views
0

我正在處理一個字符串,它總是會有「產品1:」 。我想要了解「產品1:」之後的價值。下面是字符串的一些例子VB.net字符串分割得到第一個值

Hello用戶名產品1:阿爾卡特產品2:三星卡車:聯邦快遞 結束:加拿大

Hello用戶名產品1:NOKIA卡車:聯邦快遞結束:加拿大

Hello用戶名產品1:阿爾卡特產品2:三星產品3:NOKIA 卡車:加拿大POST結束:巴西

Hello用戶名產品1:阿爾卡特 - 55特產品2:三星 產品3:NOK IA卡車:加拿大POST結束:巴西

Hello用戶名產品1:三星Galaxy S6-33卡車:加拿大郵政 結束:巴西

字符串我要找:

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

我有運氣的一點點帶有

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

但隨着上面的代碼我仍然得到

  • 阿爾卡特
  • NOKIA卡車
  • Alcatel
  • 阿爾卡特 - 55
  • 三星Galaxy S6-33卡車
+0

什麼'sMessage.Split( 「產品1」)(1).Split( 「:」)(1).Replace( 「卡車」, 「」)' ? – 2015-03-24 23:37:59

+0

我期望「Alcatel產品2」是您當前方法的結果。你可以嘗試多個分隔符,如'.Split(「Product 2:」,「Truck:」),但我想真正的解決方案寧願要求正則表達式。 – Filburt 2015-03-24 23:44:16

+4

您需要定義停止的位置。它看起來像是要在「產品1:」和下一個標籤之間的文本,即「卡車:」或「產品2:」......您需要標籤列表或關於其結構使用規則一個正則表達式。 – Greg 2015-03-24 23:44:53

回答

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:的分隔符。

+0

替換思路適用於我的特定情況。謝謝。我對正則表達式的想法很感興趣,但現在我會做簡單的替換:)謝謝 – BobNoobGuy 2015-03-26 20:22:36

0

這裏假設您希望「產品1:」和下一個「標籤」碰巧是什麼,在某些情況下是「產品2:」,而其他情況下是「卡車:」。請記住,這僅基於您提供的示例 - 如果您在「產品1:」後面出現其他「標籤」,則需要進行調整。

下面的正則表達式會得到你問幾乎什麼

(?:Product 1:)(?<product>.+?)(?=(\sProduct 2:)|(\sTruck:)) 

使用正則表達式,並給予你的示例文本,你會得到捕獲組命名爲「產品」如下:

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