2010-04-25 99 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_# 

我希望有帮助!