String Manipulation - 在另外两个字符串之间获取字符串?

时间:2010-04-25 11:53:50

标签: .net vb.net string

我有一大段文字,里面有类似的东西:

!#__ 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

但是这只删除了LAST字符串,例如: #__ KT __#! COMMAND

感谢任何帮助!

6 个答案:

答案 0 :(得分:2)

IndexOf返回主机字符串中模式的第一个字符的位置。你将startIndex加1,这就是为什么第一个“!”不包括在内。将“+ 1”更改为“+ 10”(模式的长度),它应该按预期工作。

答案 1 :(得分:1)

在分解用分号分隔的电子邮件地址时,我做了类似的事情。我已根据您的要求调整了我的代码:

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_#

我希望有所帮助!

答案 2 :(得分:0)

startIndex指向第一个分隔符字符串的开头,需要添加其长度。

尝试添加"!#__KT__#!".Length;

,而不是添加一个

答案 3 :(得分: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 

答案 4 :(得分:0)

正则表达式可以做到这一点并且看起来可读(至少对我来说; - ):

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

答案 5 :(得分:-2)

从字符串中间提取子字符串 这是链接

http://www.example-code.com/vb/mid.asp