Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5

Грамотное построение регулярки

31.01.2013, 21:20. Показов 1325. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно сабж. До этого как-то особо этим не интересовался, находились другие дела, а тут прям проперло. Пример: есть строка
+xz\a7ывмывмы---(4-95--)sda777-77d7++7+sa^%&ds-()ыпывпывпывп-
Я пытаюсь получить из нее все, что между семеркой и четверкой, пишу
C#
1
\d+.*\(\d+
получаю
7ывмывмы---(4
Дальше, хочу убрать мусор, чтобы осталось 7(4
пишу
C#
1
\d+(?=.*)\(\d+
После этого он не находит ни одного совпадения. Вопрос: почему и как грамотно это написать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.01.2013, 21:20
Ответы с готовыми решениями:

Регулярки
Народ,помогите кто чем как говориться,пишу парсер,никак не могу посреди ночи темной додумать как описать подстроку внутри которой может...

Регулярки
Прошу помощи, не могу понять как правильно написать регулярку на парсинг строк Имеем вот такую строку: Accepted amount: 24000.00 RUR...

StringBuilder и регулярки
Подскажите, можно ли на StringBuilder использовать RegEx.Replace? Если да, то как?

16
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
31.01.2013, 21:32
Psilon, после того как нашли нужно убрать все символы кроме граничных. [^47]
С регулярками знаком плоховато,но мне это помогло)
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
31.01.2013, 21:33  [ТС]
Noob.net, в идеале мне надо получить номер в том виде, в котором он есть Просто я привык быть последовательным. Сейчас завтык в этом )
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
31.01.2013, 21:45
Psilon,
Code
1
\d*[^a-z+а-я+\W]
У меня получилось только с пробелами,прости
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
01.02.2013, 01:42  [ТС]
Noob.net, и? результат:
Match
7
4
95
777
77
7
7
С тем же успехом можно было написать \d+

Добавлено через 3 часа 35 минут
Предложения будут, почему не работает ? Где же все эксперты?
0
62 / 62 / 5
Регистрация: 05.01.2013
Сообщений: 235
01.02.2013, 02:20
C#
1
2
string str="+xz\a7ывмывмы---(4-95--)sda777-77d7++7+sa^%&ds-()ыпывпывпывп-";
Console.WriteLine(Regex.Match(Regex.Replace(str,@"[^\d\(\)]",""),@"\d\(\d+\)\d+"));
возвращает
Code
1
7(495)7777777
без + в начале кода города. его можно и в ручную добавить

Добавлено через 15 минут
C#
1
\d+.*\(\d+
получаю

Дальше, хочу убрать мусор, чтобы осталось 7(4
пишу
C#
1
\d+(?=.*)\(\d+
После этого он не находит ни одного совпадения. Вопрос: почему и как грамотно это написать?
а что это вообще-
C#
1
\d+(?=.*)\(\d+
в скобках первым идет знак вопроса - зачем? потом идет знак равенства - тоже для чего? конечно не найдет, потому что знака равенства в твоей строке нет -
Code
1
7ывмывмы---(4
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
01.02.2013, 07:36  [ТС]
Цитата Сообщение от Winhttp Посмотреть сообщение
в скобках первым идет знак вопроса - зачем? потом идет знак равенства - тоже для чего? конечно не найдет, потому что знака равенства в твоей строке нет
Посмотрели бы - зачем, прежде чем посмеяться, что "равенства в строке нет и зачем первый знак вопроса"
http://msdn.microsoft.com/ru-r... constructs
0
01.02.2013, 15:37

Не по теме:

Psilon, да я почитал уже :)

0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
06.02.2013, 12:58
Это ведь просто проверка, причем атомарная, то есть она не изменяет состояние парсинга. То есть здесь
C#
1
\d+(?=.*)\(\d+
Мы ищем группу цифр, проверяем, есть ли дальше .*, и, если проверка успешна, то начинаем искать скобку сразу после уже найденной группы цифр.
Т.е. такой текст заматчится
C#
1
1(2
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.02.2013, 00:22  [ТС]
diagon, ну тогда нужно жадный квантификатор задать, чтобы он взял как можно больше подходящего под этот паттерн

Добавлено через 54 секунды
в общем задача стоит так - есть некоторая последовательность из цифр и скобок, есть формат номера телефона: 7(/d/d/d)/d/d/d/d/d/d/d, требуется убрать ряд скобок так, чтобы мы могли выделить в исходной последовательности корректные телефонные номера.

Добавлено через 9 часов 32 минуты
Попробовал вот такое
C#
1
\d+(?>[^(]*)\(\d+
То есть цифра, сколько угодно символов-нескобок, скобка, цифра. Возвращает
7ывмывмы---(4
Почему, если группа - невыделяемая (если верить документации)?????
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
07.02.2013, 07:54
Цитата Сообщение от Psilon Посмотреть сообщение
очему, если группа - невыделяемая (если верить документации)?????
Покажите где такое написано?

Что мешает вам просто взять и написать так:
Code
1
(\d+)[^(]*(\(\d+)
И после этого брать в качестве результата 1-ю и 2-ю группы результата?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.02.2013, 14:01  [ТС]
turbanoff, То, что у меня в результате будет штук 10 групп с таким выделением. Мне потом писать
C#
1
match[1] + match[2] + ...
?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
07.02.2013, 14:34
Это вас смущает? Как по мне, нужно упрощать самую сложную часть программы, пусть даже чуть усложняя остальные.
А самая сложное в использовании регулярок - сама регулярка.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.02.2013, 14:38  [ТС]
turbanoff, есть такое понятие, как "Невыделяемая группа". Что мешает сделать контекст неизвестной длины?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
07.02.2013, 15:28
Под невыделяемой группой подразумевается то, что результирующая часть выражение, для данной группы не будет присутствовать в списке групп.
Однако это не означает, что оно не будет частью всего совпадения в регулярке.
Code
1
\d+(?>[^(]*)\(\d+
Здесь первой группы не будет, только нулевая.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.02.2013, 16:17  [ТС]
turbanoff, если я напишу
для стоки $50 100 $30
регулярку
(?<=$)\d+
то будут совпадения
50 30
а не $50 $30
такое поведение тут мне и нужно

Добавлено через 2 минуты
То есть мне нужен контекст неизвестной длины, который долежен учитываться, но не должен включаться в match
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
07.02.2013, 16:47
Я понял, что вы имели ввиду. Я не знаю такого способа, и всегда считал, что его нет в регулярках за ненадобностью. Если найдете - обязательно напишите.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2013, 16:47
Помогаю со студенческими работами здесь

Увеличение скорости парсинга регулярки,возможно ли?
Собственно есть регулярка,нужно парсить id и имя клана Впринципе он парсит,но на странице окло 40 кланов, всего 13 страниц и в среднем на...

Грамотное использование контекста
Есть приложуха, которая лезет в SQL сервер (путём использования строки подключения, заданной программно и Entity Framework классов), делает...

Построение регулярки для html
Помогите составить регулярку для получения значения Значение выделено красным &lt;div class=&quot;ii _temp&quot;&gt;&lt;div...

Грамотное использование переменных, get() и set()
Подскажите как грамотней использовать переменные в классе и вызывать их из других классов? И в чем разница: using System; using...

Портирование регулярки
Здравствуйте! Есть одна регулярка, которую мне помог написать один хороший человек. Она прекрасно работает -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru