M Haikal Anatama Ответов: 4

[Vb.net] как разделить строку с несколькими делиметрами, но сохранить делиметр


У меня есть веревочка:

строка = "желтый.автомобиль красный.сумка Синяя.глаза"

Есть ли способ разделить строку как на точки, так и на пробелы, но сохранить только точки внутри массива?


['Желтый','.','Автомобиль','Красный','.','Сумка','Синий','.','Глаза']

Регулярное выражение для string.split(regexp) было бы предпочтительнее

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

Дим arr как строка() = регулярное выражение.Сплит(Текстовое Поле Textbox1.Текст:" (. |,)")
Для каждого я как нить в ОБР
Приставка.WriteLine(i)
Следующий

4 Ответов

Рейтинг:
2

Gerry Schmitz

Замените точки другим маркером, включающим точку, а затем разделите их на новый маркер.

например, если вы хотите разделить на "." и сохранить, то замените "." на "@." Или ".@"; затем разделите на "@".


Рейтинг:
2

Patrice T

Цитата:
Регулярное выражение для string.split(regexp) было бы предпочтительнее

Совет: изучите регулярное выражение, есть более чем 1 способ его использования.
Split используется для разрезания струны на сепаратор и сепаратор теряется.
Match на другой стороне будет составлен список каждого совпадения в строке. вам просто нужно построить регулярное выражение, которое будет соответствовать "слову или точке".
Регулярное выражение типа \w+|\. должно быть все, что вы хотите.

Всего лишь несколько интересных ссылок, которые помогут построить и отладить регулярное выражение.
Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
RegExr: Learn, Build, & Test RegEx[^]
Онлайн-тестер регулярных выражений и отладчик: PHP, PCRE, Python, Golang и JavaScript[^]
Этот пример показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение: Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]
Этот сайт также показывает регулярное выражение в красивом графике, но не может проверить, что соответствует регулярному выражению: Regexper[^]


Рейтинг:
1

OriginalGriff

В регулярном выражении точка '.' имеет специфическое значение: "любой символ". Так что выражение "а.Б" будет соответствовать "Ааб", "АВВ", "АСВ", ... любой символ между A и B.
Итак, ваше регулярное выражение: "(.|,) " - это "либо любой символ, либо запятая", что равносильно "любому символу!

Вы можете экранировать его так, чтобы он стал литералом: "( \ .|,)", который является "точкой или запятой", но для односимвольных значений есть лучший синтаксис: "[ \ .,]", который делает то же самое.


Рейтинг:
1

Maciej Los

Попробовать это:

Dim s As String = "Yellow.car Red.Bag Blue.eyes"
s = s.Replace(".", " . ")
Dim result = String.Join(",", s.Split(New String(){" "}, StringSplitOptions.RemoveEmptyEntries).Select(Function(w) String.Concat("'", w, "'")))


Результат:
'Yellow','.','car','Red','.','Bag','Blue','.','eyes'


Как видите, логика очень проста:
1) Замените точку точкой с пробелами вокруг нее,
2) разделите строку на пробелы и добавьте ['] вокруг каждой части,
3) соединяйте части запятыми.

Вот и все!