Манипуляция строк - получить строку между двумя другими строками? - PullRequest
1 голос
/ 25 апреля 2010

У меня есть большой фрагмент текста, в котором есть что-то похожее на это:

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

2 голосов
/ 25 апреля 2010

IndexOf возвращает позицию первого символа шаблона в строке хоста. Вы добавляете 1 к своему startIndex, поэтому первый "!" не входит Измените «+ 1» на «+ 10» (длина вашего паттерна), и он должен работать как положено.

1 голос
/ 26 апреля 2010

Я сделал нечто похожее на это, разбивая адреса электронной почты через точку с запятой. Я адаптировал свой код в соответствии с вашими требованиями:

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

Надеюсь, это поможет!

0 голосов
/ 25 апреля 2010

Регулярные выражения могут помочь и выглядят читабельными (по крайней мере, для меня; -):

string command = null;
Regex regex = new Regex (@"!#__KT__#!(?<command>.+)!#__KT__#!");
Match match = regex.Match(commandText);
if (match.Success)
{
    command = match.Groups["command"].Value;
}
0 голосов
/ 25 апреля 2010

Извлечь подстроку из середины строки здесь есть ссылка

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

0 голосов
/ 25 апреля 2010

Ну, просто добавьте длину "# 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 голосов
/ 25 апреля 2010

startIndex указывает на начало вашей первой строки разделителей, вам нужно добавить ее длину.

Вместо того, чтобы добавить один, попробуйте добавить "!#__KT__#!".Length;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...