Member 13703964 Ответов: 1

Как читать richtextbox строка за строкой в другой richtextbox только с заданным параметром


Здравствуйте Эксперты,

у меня есть Richtextbox1 со 100 строками. он смешан с буквенно-цифровыми линиями.
мне нужны были только строки, соответствующие следующим параметрам.

1-е 3 буквы числовые
4-я буква должна быть тире "-"
от 5-го до 12-ти букв числовые
с 13 по 18 буква алфавита
19-я буква-это косая черта вперед "/"

пример строк - 789-12123434LHRMUC/

мне нужны только линии для Richtexbox2, которые соответствуют вышеуказанным параметрам.
пожалуйста, помогите разобраться в этом.

Что я уже пробовал:

For Each line In RichTextBox1.Lines
            richtextbox2.line (1)= (RichTextBox1.Lines(1))
        Next

1 Ответов

Рейтинг:
1

Maciej Los

Вы можете использовать Регулярное выражение[^]:


Dim lines As String()= New String(){"789-12123434LHRMUC/", 
	"78Z-1R123434LHRMUC/", "A89-12123434LHRM1C/", "989-12853434LHRMOU/",
	"789-12123434LHRMUC/T1K71MC1.06/CONSOLIDATION/PILCRT"}

Dim pattern As String = "^\d{3}-\d{8}\w{6}/"
Dim r As Regex = New Regex(pattern)

Dim result = lines.Where(Function(x) r.Match(x).Success) _
	.Select(Function(x) New With { _
		.line = x, _
		.match = r.Match(x).Value, _
		.remaining = x.Replace(r.Match(x).Value,"")}) _
	.ToArray()

string[] lines = new string[]{"789-12123434LHRMUC/", 
	"78Z-1R123434LHRMUC/", "A89-12123434LHRM1C/", "989-12853434LHRMOU/",
	"789-12123434LHRMUC/T1K71MC1.06/CONSOLIDATION/PILCRT"};

string pattern = @"^\d{3}-\d{8}\w{6}/";
Regex r = new Regex(pattern);

var result = lines.Where(x=>r.Match(x).Success)
	.Select(x=>new{
		line = x,
		match = r.Match(x).Value,
		remaining = x.Replace(r.Match(x).Value,"")})
	.ToArray();


Для получения более подробной информации, пожалуйста, смотрите: Язык Регулярных Выражений - Краткий Справочник | Microsoft Docs[^]


Maciej Los

Взгляните на мой рисунок. Она отличается от вашей.

Member 13703964

я попробовал твой код внутри http://regexstorm.net/tester
но это не работает, если я ставлю то же самое, поэтому я попытался изменить свой код
@"^\d{3}-\d{8}\w{6}/$";
не могли бы вы мне посоветовать, пожалуйста.

Maciej Los

На том же сайте я уже пробовал этот паттерн: ^\d{3}-\d{8}\w{6}/ и это прекрасно работает. Вы должны прочитать о классе регулярных выражений, чтобы узнать, что означает каждая часть выражения. Для получения более подробной информации, пожалуйста, смотрите: Язык Регулярных Выражений - Краткая Справка.

Member 13703964

большое спасибо за ваши отзывы. теперь я планирую поставить это в vb.net форма.
в моей форме есть 2 Richtextboxes и одна командная кнопка.
Richtextbox1 (sourcedata) Richtextbox2 (Result) любая идея, как написать код под командной кнопкой, чтобы показать результат в Richtextbox2.

Maciej Los

Подумай об этом! Вам нужно получить строки RichTextBox1 в переменную, а затем получить только совпадающие строки и поместить их в другой элемент управления RichTextBox.
Смотрите обновленный ответ для vb.net код.
[РЕДАКТИРОВАТЬ]
Dim lines As String() = RichTextBox1.Lines
Dim result As String() = ....
RichTextBox2.Lines = result

Member 13703964

Привет пробовал, но не работает, можете ли вы проверить, нужно ли что-нибудь добавить с моим кодом
Система Импорта.Текст.RegularExpressions
Общественного Класса Form1
Дим строка как строка() = richtextbox1 отображение.Линии
Дим регулярное выражение = новое регулярное выражение ("выражение\D{3}-\Д{8} и\W{6}/")
Dim match = регулярное выражение.Матч(линия)
Private Sub Button1_Click(бывал отправитель как система.Объект, бывал е как система.EventArgs) Обрабатывает Button1.Щелчок
Если совпадут.Тогда Успех
RichTextBox2=(совпадение.Ценность)
Конец, Если
Конец Подводной Лодки
End Класса

Maciej Los

Дорогая, это твоя работа, а не моя. Я предоставил полный образец. Совет: Взгляните на мой ответ, чтобы узнать, как выполнить переменную [result].

Dim lines As String() = RichTextBox1.Lines
Dim result As String() = [paste the code from my answer here!]
RichTextBox2.Lines = result

Что еще вам нужно?

Не ленитесь!

Member 13703964

Привет дорогой, честно говоря, я не ленивый человек, я знаю только приложения ms office. Я учусь vb.net начиная с 1 месяца через youtube и я сделал несколько приложений win для работы, связанной с vb.net я все еще нахожусь на стадии обучения, поэтому короткие ответы не щелкают в моем уме. спасибо, что дали блок-схему. я буду продолжать учиться.