5 / 10 / 3
Регистрация: 05.10.2010
Сообщений: 97
|
|
1 | |
Проверка валидности строк с помошью регулярных выражений05.10.2010, 18:27. Показов 8584. Ответов 8
Метки нет Все метки)
(
Здравствуйте. Возникла такая проблема: есть определённый набор строк, задано регулярное выражение. Необходимо проверить валидность строк. Это делается естественно не сложно. Но я перерыл полинтернета и так и не нашёл, как с помощью стандартных функций узнать, в каком именно месте строки начинается несовпадение с регулярным выражением. То есть вопрос такой: как определить до какого места в строке, есть совпадение с регулярным выражением?
0
|
|
05.10.2010, 18:27 | |
Ответы с готовыми решениями:
8
Массив регулярных выражений Как оптимизировать применение регулярных выражений
Проверка "валидности" ссылки средствами ASP |
1507 / 774 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
|
|
05.10.2010, 22:17 | 3 |
Дайте тестовые данные и регулярное выражение и поможем.
0
|
5 / 10 / 3
Регистрация: 05.10.2010
Сообщений: 97
|
|
05.10.2010, 22:21 [ТС] | 4 |
Вот регулярное выражение:
@"([А-Я][а-я]+ ){3}\s*((0[1-9])|(1\d)|(2\d)|(3(0|1))).((0[1-9])|(1(0|1|2))).19\d\d\s+\d{7}(\d{3})?" Ну примерно так: Фамилия Имя Отчество дата телефон. Только какая разница как оно выглядит? Мне интересно какие методы борьбы есть с моей проблемой. Тестовые данные: Иванов Петр Николаевич 18.12.1988 9213333333 Иванов Петр Николаевич 18.12.1988 9213333333 Петров Николай Иванович 1987.10.18 7561111 Николаев Иван Петрович 01.12.1989 564444 Андреев Семен Борисович 03.07.1988 9115555555 Семенов Борис Андреевич 12.23.1988 35622223 Борисов Андрей Cеменович 10-10-1988 9602222222 Александров Павел Викторович 22.10.1988 3253344 Я бы для решения моей проблемы реализовал конечный автомат. Но необходимо использование именно регулярных выражений.
0
|
1507 / 774 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
|
||||||
05.10.2010, 22:29 | 5 | |||||
А регулярные выражения и построены на конечных автоматах.
Как я понял вам надо узнать в каком месте в строке данные не подходят шаблону. я думаю вам не надо тестировать одним регулярным выражением, а разбить на несколько например одно для тестирования ФИО другое Телефон и т д и вы будете знать что именно у вас не соответствует шаблону Добавлено через 1 минуту Можете и одним только используйте именнованные группы
0
|
76 / 73 / 9
Регистрация: 09.06.2010
Сообщений: 206
|
|
06.10.2010, 01:20 | 6 |
У экземпляра Match есть свойства Index и Length - начало и длинна совпадения в тексте
Но я то же склоняюсь к именованым группам По регулярке Видемо выделенный текст должен соответствовать ФИО, но совпадения не будет, тк пробельный символ идет только после 3-х буквенных групп, а не между ними
0
|
5 / 10 / 3
Регистрация: 05.10.2010
Сообщений: 97
|
|
06.10.2010, 23:04 [ТС] | 7 |
хорошо, я узнаю в какой именно группе есть несовпадение. А как узнать индекс символа который не совпадает?
Добавлено через 18 часов 15 минут Просто автомат без всяких проблем может сказать в каком месте строка перестаёт быть валидной. Регулярные выражения основаны на автоматах, как было замечено выше, но при этом я не могу найти стандартного метода который бы четко давал ответ, где строка перестаёт удовлетворять регулярному выражению. Очевидно же, что это может понадобиться в некоторых задачах, так что я не могу поверить, что стандартным интерфейсом это не предусмотрено.
0
|
76 / 73 / 9
Регистрация: 09.06.2010
Сообщений: 206
|
|||||||||||
07.10.2010, 04:22 | 8 | ||||||||||
Рег.в. ищет совпадения в тексте. Если совпадения нет, то оно ничего не найдет
Значит можно выделить "отрезки" на которых нет совпадения - при условии правильной регулярки и предположения что блоки совпадения должны следовать друг за другом
Например, "Александров Павел Викторович 22.10.1988 3253344" и "Павел Викторович Александров 22.10.1988 3253344" - фамилия в другом месте, не каждый человек отличит фамилию от имени. Или дата 12-12-12. Необходимо составить список возможных "ошибок" в тексте, соответственно сложность обработки возрастет. Можно написать несколько регулярок для проверки ошибок, и ими проверять куски, которые получены в предыдущем примере Или поискать более простые пути. Если у вас не сплошной текст, а отдельные строки, которые должны полностью совпадать с шаблоном, можно для каждой группы написать отдельное р.в. и поочередно проверять
2
|
5 / 10 / 3
Регистрация: 05.10.2010
Сообщений: 97
|
|
07.10.2010, 20:49 [ТС] | 9 |
Благодарю)
0
|
07.10.2010, 20:49 | |
Помогаю со студенческими работами здесь
9
Проверка строки с пом. регулярных выражений
Проверка правильности введенных дат с использованием регулярных выражений Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |