2010-04-25 102 views
1

我有一大段文字,其中有一些類似於此的文字:字符串Manipultation - 兩個其他字符串之間獲取字符串?

!#__ KT __#!COMMANDHERE!#__ KT __#!

我想在VB.Net中獲得字符串的'COMMANDHERE'部分,我該如何去做這件事?我有這個至今:

Dim temp As String = WebBrowser1.Document.Body.ToString 
Dim startIndex As Integer = temp.IndexOf("!#__KT__#!") + 1 
Dim endIndex As Integer = temp.IndexOf("!#__KT__#!", startIndex) 
Dim extraction As String = temp.Substring(startIndex, endIndex - startIndex).Trim 

TextBox1.Text = extraction 

然而,這僅刪除最後一個字符串如:#__ KT __#! COMMAND

任何幫助表示讚賞!

回答

2

IndexOf返回主機字符串中模式的第一個字符的位置。你給startIndex加1,這就是爲什麼第一個「!」不包括在內。將「+ 1」更改爲「+ 10」(模式的長度),它應該按預期工作。

+0

謝謝!這一個角色造成了不同,非常感謝。 – Ben 2010-04-25 11:58:49

0

startIndex指向您的第一個分隔符字符串的開始,您需要添加它的長度。

而不是增加一個,嘗試添加"!#__KT__#!".Length;

+0

或者更好的是,將該字符串保存在一個常量中,以便以後可以很容易地更改它。 – 2010-04-25 11:59:14

0

好了,只需添加的長度 「#KT#!」前綴的startIndex提取字符串時:從字符串 這裏的中東

Dim temp As String = WebBrowser1.Document.Body.ToString 
Dim startIndex As Integer = temp.IndexOf("!#__KT__#!") + 1 
Dim endIndex As Integer = temp.IndexOf("!#__KT__#!", startIndex) 
Dim extraction As String = temp.Substring(startIndex + 9, endIndex - startIndex - 9).Trim 

TextBox1.Text = extraction 
0

正則表達式可以做的伎倆,看起來可讀的(我最少;-):

string command = null; 
Regex regex = new Regex (@"!#__KT__#!(?<command>.+)!#__KT__#!"); 
Match match = regex.Match(commandText); 
if (match.Success) 
{ 
    command = match.Groups["command"].Value; 
} 
1

我做了類似這樣的事情時,突然分離由sem分隔的電子郵件地址icolon。我已經適應我的代碼在這裏滿足您的要求:

Dim temp As String = WebBrowser1.Document.Body.ToString 
Dim stringArray() As String = Split(temp, "!") 
TextBox1.Text = stringArray(2) 

在這段代碼中,你的文字#KT#COMMANDHERE#KT#!!!被分解成以下數組:

stringArray(0) 'is equal to nothing 
stringArray(1) 'is equal to #_KT_# 
stringArray(2) 'is equal to COMMANDHERE 
stringArray(3) 'is equal to #_KT_# 

我希望有幫助!