2015-04-27 2 views
-1

Я пытаюсь получить весь текст между 2 статическими строками в Visual Basic. Например:для каждого текста между двумя строками VB.NET

Hello my name is Jesse Hello ........ Hello my name is John Hello ...... Hello my name is Frank Hello ........ 

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

Jesse 
John 
Frank 

Я сделал некоторые исследования по этому вопросу, но я только мог найти, как получить его с 1 результатом, и я надеюсь, что кто-то здесь может мне помочь.

я в настоящее время

Dim s As String = TextBox1.Text 
Dim i As Integer = s.IndexOf("Hello my name is") 
Dim result As String = s.Substring(i + 1, s.IndexOf("Hello", i + 1) - i - 1) 

Но Виль дать только 1 выход.

Спасибо.

+0

пожалуйста, напишите код – Paolo

+0

Editted главный пост @Paolo – Jesse

+0

Является ли «Привет ......... "часть вторая" статическая строка ", которую нужно удалить? – Alex

ответ

1

Регулярные выражения. Вы должны использовать регулярные выражения, то есть System.Text.RegularExpressions

Imports System.Text.RegularExpressions 

Dim matches As MatchCollection = Regex.Matches(TextBox1.Text, "Hello my name is (\w+)") 
For Each m As Match In matches 
    Console.WriteLine(m.Groups(1).Value) 
Next 

Если вы новичок в регулярных выражениях, то я могу только дать вам теплый обнять и сказать: «Я сожалею.»

+0

Мне жаль, но я новичок в этом все, и я не знаю, как заставить его работать. Я изучаю, почему я здесь :) и, к сожалению, я не могу заставить ваш код работать. – Jesse

+0

Привет, Джесси, я добавил в код для прокрутки матчей. Теперь регулярные выражения являются мощной магией и очень полезны для обработки строк. Повеселись. –

0

Вы можете сделать следующее, для данной input строки:

ReadOnly Separators As String() = { "Hello my name is " } 
Dim names As String() = input _ 
    .Split(Separators, StringSplitOptions.RemoveEmptyEntries) _ 
    .Where(Function(s) Not s.StartsWith("Hello")) _ 
    .ToArray() 

For Each name As String In names 
    Console.WriteLine(name) 
Next 

This:

  1. разбивает строку на несколько строк и удаляет статические «Привет мое имя» части строки из вход.
  2. Фильтры это с Where, чтобы исключить любую строку, начиная с «Hello»
  3. преобразует результат в массив с помощью ToArray
+0

Спасибо, но это даст все после Привет, мое имя, значит, я получаю Джесси Привет ......, Джон Привет ......, и Фрэнк Привет ...... – Jesse

+0

@Jesse Вот почему я спросил вас, следует ли удалить «Hello ......». Ваш ответ на это не был «да». Я обновил ответ, чтобы удалить «Hello .....». – Alex

+0

Извините за недопонимание. Я попробовал код, и я думаю, что это почти сделано. Только один вопрос. Можно ли удалить все после второго «Hello»? Потому что то, что я имел в виду в своем комментарии, было то, что это могло быть Привет, меня зовут Jesse Hello * случайный текст здесь * Привет, меня зовут Джон Привет * Некоторые другие случайные тексты *. Поэтому он хотел бы удалить все после второго Hello до тех пор, пока не найдет новое «Привет, мое имя», и он получит имя и сделает это снова и снова. – Jesse