Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RegExp tokenizer, нужна помощь в написании регулярки 
V
    Опции темы
azesmcar
Дата 23.5.2010, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



Добрый день,

Регулярные выражения всегда были моим слабым местом, никак руки не доходят изучить как следует.
Нужна помощь в создании регулярного выражения, для разделения текста на токены. Разделителем служат все символы, кроме a-z, A-Z. Т.е. все, кроме alphabetical символов, ума не приложу как это сделать
Например:
LpZaq2Wd32Da
[0] = LpZaq
[1] = Wd
[2] = Da

можно конечно же ручками, но зачем? Мне кажется регулярками это сделать гораздо проще.

Заранее большое спасибо.

PM   Вверх
diadiavova
Дата 23.5.2010, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Если нужна регулярка для токена, то так
Код

[a-zA-Z]
А если для разделителя - так
Код

[^a-zA-Z]

При включении опции IgnoreCase ещё проще
Код

[a-z]

и
Код

[^a-z]
соответственно.


Или я чего-то не паонял? smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
azesmcar
Дата 24.5.2010, 06:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



Код

        public static void ParseLine(string inputT)
        {
            String[] list = Regex.Split(inputT, @"[a-zA-Z]");
            foreach (String s in list)
            {
                Console.WriteLine(s);
            }
        }

        static void Main(string[] args)
        {
            ParseLine("Hello world");
        }

выводит пустые строки, или я что-то не так написал? Насколько я могу судить о регулярках это не совсем то, что нужно, но я не уверен..

в общем нужно разделить текст на слова, разделитель любое количество любых символов кроме a-z, A-Z. Т.е. словами явлется набор символов a-z, A-Z, остальное - разделитель.
PM   Вверх
diadiavova
Дата 24.5.2010, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Если используется разделитель и он может состоять из любого количества символов, тогда ему нужен квантификатор +. Кроме того, ты использовал регулярку для токена в качестве разделителя, поэтому и получил список разделителей.
Код

            String[] list = Regex.Split(inputT, @"[^a-zA-Z]+");



Добавлено через 41 секунду
Цитата(azesmcar @  24.5.2010,  07:31 Найти цитируемый пост)
 Насколько я могу судить о регулярках это не совсем то, что нужно

Оно самое.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
mrbrooks
Дата 24.5.2010, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 7
Всего: 306



Цитата(azesmcar @  23.5.2010,  17:16 Найти цитируемый пост)
LpZaq2Wd32Da
[0] = LpZaq
[1] = Wd
[2] = Da

 я бы так зафигачил и не парился:

Код

        static void Main(string[] args)
        {
            var res = Regex.Matches("LpZaq2Wd32Da", "[a-z]+", RegexOptions.IgnoreCase);
            foreach (Match item in res)
            {
                Console.WriteLine(item.Value);  
            }
            Console.Read();
        }


Добавлено через 1 минуту и 6 секунд
хотя, как я понимаю, diadiavova к этому и вел
PM MAIL   Вверх
azesmcar
Дата 24.5.2010, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



diadiavova

Теперь понятно, я почему-то думал в сторону split а не matches.

Спасибо.

Цитата(mrbrooks @  24.5.2010,  10:40 Найти цитируемый пост)
 я бы так зафигачил и не парился:

так и сделал smile 
благодарю.

Это сообщение отредактировал(а) azesmcar - 24.5.2010, 13:08
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0784 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.