Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помощь с составлением регулярного выражения 
:(
    Опции темы
w03zd8rc
Дата 27.4.2015, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 26.2.2007

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



День добрый!
Пытаюсь написать регулярку для Regex.Matches на c#.
Пример входной строки:
Код

Приказ №1 4.1 чтото еще 1.4.1 и еще чтото 4.1.2 или так 2.8.;4.1.;8.2 или п4.1

Регулярка должнеа найти все 4.1 если это является цельным (тоесть в конце и начале найдет, а вот 1.4.1 и 4.1.2 должно отбраковать)

Получилось следующее:
Код

(([^0-9](\\.))| |^|,|;|/|[а-я]|[А-Я]|[a-z]|[A-Z])4.1((\\.)[^0-9]| |$|,|;|/|[а-я]|[А-Я]|[a-z]|[A-Z])

И в большинстве случаев отрабатывает, за исключением таких ситуаций как:
Код

4.1

уже не находит.
Помогите привести в более простой вид (я так полагаю можно было бы сделать и попроще) чтоб находило все правильно
PS. Есть еще такой случай, когда ищем "1" - то в варианте
Код

Приказ №1 2.3;1

должен находить только конечный
PM MAIL   Вверх
baldina
Дата 27.4.2015, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Код
(^|[^\d\.;])4\.1(\s+|$)


Код
(^|\s)\b1\b(\s|$)

или
Код
[\s;]1\b


Это сообщение отредактировал(а) baldina - 27.4.2015, 16:05
PM MAIL   Вверх
w03zd8rc
Дата 27.4.2015, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 26.2.2007

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



Цитата(baldina @ 27.4.2015,  14:03)
Код
(^|[^\d\.;])4\.1(\s+|$)

Не все находит. 
Код
    
Приказ №1 4.1 чтото еще 1.4.1 и еще чтото 4.1.2 или так 2.8.;4.1.;8.2 или п4.1 4.1п

Выделил что должно находить.....

Вместо 4.1 может быть что угодно: и 2, и 1, и 3.8.1 и пр

Это сообщение отредактировал(а) w03zd8rc - 27.4.2015, 16:22
PM MAIL   Вверх
baldina
Дата 27.4.2015, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



ну вы уж сформулируйте толком что требуется. если речь о номерах из двух(и только двух) частей, разделенных точкой, то еще проще
Код

(?<!\.)\d+\.\d+(?!\.\d)

PM MAIL   Вверх
w03zd8rc
Дата 28.4.2015, 05:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 26.2.2007

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



Цитата(baldina @ 27.4.2015,  17:39)
ну вы уж сформулируйте толком что требуется. если речь о номерах из двух(и только двух) частей, разделенных точкой, то еще проще
Код

(?<!\.)\d+\.\d+(?!\.\d)

Номера не всегда из двух цифр, и не всегда это номера =)
Вариантов там полно, таких как  3, 2.8, 2.8.1 и тд
Сделал так:
Код

string tmpstr = " "+dataGridView1.Rows[i].Cells[comboBox2.SelectedIndex].Value.ToString()+" ";
System.Text.RegularExpressions.MatchCollection maches = System.Text.RegularExpressions.Regex.Matches(tmpstr, "([^0-9](\\.)|[^0-9\\.№]|([^№] ))" + work.Key.Replace(".", "\\.") + "(((\\.)[^0-9])|[^0-9\\.])");

Пока правильно отрабатывает....
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




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


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

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