Перейти из форума на сайт.Реклама на Ru.Board


Система IP-видеонаблюдения "Линия". Скачать бесплатную демо-версию для 16 камер. НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Регулярные выражения

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10

Открыть новую тему     Написать ответ в эту тему

Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VadKomarov
Не надо пытаться забивать гвозди микроскопом. Разобрали входную строку, получили все нужные компоненты - всё, дальше работайте с ними средствами Delphi. Приводите в нужный вид и формируйте выходную строку.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 5092 | Зарегистр. 22-10-2005 | Отправлено: 08:07 24-03-2017
VadKomarov



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
хорошо допустим я не пишу программу а просто хочу узнать есть ли такая возможность используя только регулярку добавить этот 0
 
Задачи бывают разные поэтому и прошу помощи на выполнение именно такой задачи.
 
А так же с заглавными буквами.  


допустим пользователю надо будет обработать такой текст
Фамилия: ИВАНОВ Имя: ИВАН Отчество: ИВАНОВИЧ Должность: НАЧАЛЬНИК
результат хочется такой
Иванов Иван Иванович находится в должности: начальник


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


...
345245
234
56
56788
....


а результат допустим нужен будет именно шестизначное число т.е. дополненное слева "00..."

Всего записей: 82 | Зарегистр. 01-05-2005 | Отправлено: 08:57 24-03-2017 | Исправлено: VadKomarov, 08:59 24-03-2017
YuS_2



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VadKomarov

Цитата:
используя только регулярку добавить этот 0

В регулярных выражениях это не делают, т.к. нет в них операторов замены по условию, это прерогатива языка программирования.
Можно только сделать, например, весьма условно два последовательных регэкспа, примерно так:

Код:
/(\d{4})\.(\d)\.(\d{1,2})/\3.0\2.\1/g
/(\W)(\d)(\.\d{2}\.\d{4})/\10\2\3/g
 

 

Цитата:
в регулярке будет определяться что должно начинаться с заглавной буквы

Найти регистрозависимым поиском определенные символы (слова) можно, а вот менять регистр букв в слове - это регэкспами не выполняется.

Всего записей: 1651 | Зарегистр. 03-02-2009 | Отправлено: 09:28 24-03-2017
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VadKomarov
Совет ровно тот же. Регулярки ищут фрагменты по заданному шаблону, но преобразованием найденного не занимаются. Никак.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 5092 | Зарегистр. 22-10-2005 | Отправлено: 09:31 24-03-2017
VadKomarov



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Спасибо за ваши советы.
 
Подскажите ещё как мне из текста выдернуть данные регуляркой
 
Пример текста:


Адрес:
Республика ХХХХХХХ  
Край(область) ХХХХХХ
Район ХХХХХХХХ
Нас.пункт ХХХХХХХХХ
Улица ХХХХХ  дом ХХХХХ кв. ХХХХ

 
здесь всё боле/менее понятно:
 
Адрес:\r\nРеспублика (.*) \r\nКрай\(область\) (.*)\r\nРайон (.*)\r\nНас.пункт (.*)\r\nУлица (.*)  дом (.*) кв. (\d{1,4})
 
а как будет выглядеть регулярное выражение если надо выбрать к примеру из такого:
Адрес:
Республика ХХХХХХХ  
ХХХХХ
ХХХХХ
...

Край(область) ХХХХХХ
Район ХХХХХХХХ
Нас.пункт ХХХХХХХХХ
....

 
т.е. весь текст между словами РЕСПУБЛИКА и КРАЙ(ОБЛАСТЬ) надо получить при отработке и сколько будет строк я не могу точно узнать.

Всего записей: 82 | Зарегистр. 01-05-2005 | Отправлено: 06:05 01-04-2017 | Исправлено: VadKomarov, 06:09 01-04-2017
sikemo

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Республика .+
((?>.+\r\n)({1,})
Край\(область\)
 
 
\2
 
идея в том, чтобы не открыть группировку на Республика ,а на  

Цитата:
весь текст между словами РЕСПУБЛИКА и КРАЙ(ОБЛАСТЬ)  

и обратиться к нему через \2 (\1 сработает на Республика .+)

Всего записей: 986 | Зарегистр. 27-11-2008 | Отправлено: 10:28 01-04-2017
VadKomarov



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
sikemo
Спасибо.
Пытаюсь разобраться, я вообще не знаю сами регулярные выражения и даже не знаю как они будут потом выглядеть у меня в программе.
Но для себя надо...
поэтому хочу попытаться понять.
значит получается  так  
.+ это у нас любые символы кроме (\r и \n)
( и вторая (?>.+\r\n) не совсем понял как это описывается...
дальше ({1,}) это типа  текста который я не понял с символами переноса строки должны встретиться 1 и более раз
а если будет одна строка  
РЕСПУБЛИКА ХХХХХ  
КРАЙ(ОБЛАСТЬ) ХХХХ
 
в общем пока ни чего не получилось...
где то не дописал что то в выражении
В общем у меня программа (Delphi) должна взять текст из файла
   
загрузить и обработать
   
но что то видимо я не так в регулярке написал и выдает ошибку  
   
 
Буду рад если мне по детски всё по шагово распишите что и как...
 
Спасибо заранее

Всего записей: 82 | Зарегистр. 01-05-2005 | Отправлено: 14:58 01-04-2017
YuS_2



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VadKomarov

Цитата:
весь текст между словами РЕСПУБЛИКА и КРАЙ(ОБЛАСТЬ) надо получить при отработке и сколько будет строк я не могу точно узнать.


Код:
(?<=республика)([\s\S]*?)(?=край)

Всего записей: 1651 | Зарегистр. 03-02-2009 | Отправлено: 17:26 01-04-2017 | Исправлено: YuS_2, 22:59 01-04-2017
sikemo

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
для практики с регэкспами можно/надо либо теория и/или (ну как или?) Regelr там онлайн или офлайн можно тестить регулярки
суть такова
?> не создает группу из предпоиска  
потом надо «собрать строки) — указываем от 1 и более, тут конечно, \r\n можно опускать ибо поиск должен остановиться в конце знака оконч. строки
потом надо это определить как группу, и символом «конца» поиска выступит КРАЙ.
 
Учтите, что после РЕСПУБЛИКА пробела не надо иначе он попапает в выражение

Всего записей: 986 | Зарегистр. 27-11-2008 | Отправлено: 19:55 01-04-2017
VadKomarov



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Спасибо вам огромное. очень нужная и своевременная помощь, а главное онлайн тест.. просто замечательно.  

 
сапсибо а есть подобное
онлайн тестер
то что вы показали но на русском?
 
и ещё могу ли я просто писать так
(?<=республика)([\s\S]*?)(?=край\(область\)) КРАЙ\(ОБЛАСТЬ\) (.*)
и почему тут ошибка, как должно выглядеть выражение что бы было без ошибочно и выбирала по всем ХХХХХХХ
 
ведь в таком варианте всё работает
Фамилия (.*)  Имя (.*)  \r\nОтчество (.*)  \r\nДата рождения:год (\d{1,4})  месяц (\d{1,2})  число (\d{1,2})
{1} {2} {3} {6}.{5}.{4} года рождения

Всего записей: 82 | Зарегистр. 01-05-2005 | Отправлено: 08:56 02-04-2017 | Исправлено: VadKomarov, 09:16 02-04-2017
YuS_2



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VadKomarov

Цитата:
то что вы показали но на русском?

вряд ли... но тут гугль в помощь, возможно кто-нибудь и сделал уже на русском.
Сам пользуюсь редко, поэтому хватает вполне по-аглицки.
 

Цитата:
почему тут ошибка, как должно выглядеть выражение что бы было без ошибочно и выбирала по всем  

Весь вопрос в том, что для составления шаблона регэкспов необходимо иметь представление о всём тексте, т.е. возможны ли, например, повторения этого массива адреса и кроме того, необходимо видеть, что же в итоге требуется получить...

Всего записей: 1651 | Зарегистр. 03-02-2009 | Отправлено: 10:05 02-04-2017
VadKomarov



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
YuS_2
 

Цитата:
Весь вопрос в том, что для составления шаблона регэкспов необходимо иметь представление о всём тексте, т.е. возможны ли, например, повторения этого массива адреса и кроме того, необходимо видеть, что же в итоге требуется получить...

 
на самом деле будет в тексте встречаться несколько раз  
и результатом будет что то типа  
АДРЕСА:
...город {3} улица {4} дом {5}...
...город {3} улица {4} дом {5}...
...город {3} улица {4} дом {5}...
...город {3} улица {4} дом {5}...
 
и выбираться будет из подобного
.....
Республика ХХХХХХХ
ХХХХХ
ХХХХХ
Край(область) ХХХХХХ  
Район ХХХХХХХХ  
Нас.пункт ХХХХХХХХХ
.....
 
Мне просто надо понять саму суть как делать несколько групп... так сказать по аналогии
 


после некоторых проб и ошибок сделал такую регулярку

Код:
(?<=республика)([\s\S]*?)(?=край\(область\))Край\(область\) (.*) \r\nРАЙОН (.*) \r\nНАС.ПУНКТ (.*) \r\n

 
в общем отработало но всего ОДИН раз и не могу понять почему
картинки
 
хотя в онлайн тесте это регулярное выражение не сработало

Всего записей: 82 | Зарегистр. 01-05-2005 | Отправлено: 11:49 02-04-2017 | Исправлено: VadKomarov, 12:57 02-04-2017
YuS_2



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
на самом деле будет в тексте встречаться несколько раз

тогда, примерно так:

Цитата:
Адрес:  
Республика ХХХХХХХ  
ХХХХХ  
ХХХХХ  
...  
Край(область) ХХХХХХ  
Район ХХХХХХХХ  
Нас.пункт ХХХХХХХХХ


Код:
республика\s*([\s\S]*?)\s*край\s*\(\s*область\s*\)\s*([^\n]*?)\s*\nрайон\s*([^\n]*?)\s*\nнас\.\s*пункт\s*([^\n]*?)\s*\n

 
Добавлено:
VadKomarov

Цитата:
хотя в онлайн тесте это регулярное выражение не сработало

В различных реализациях регэкспов, могут быть некоторые нюансы, поэтому необходимо изучать документацию к конкретной реализации и править шаблоны по ним.

Всего записей: 1651 | Зарегистр. 03-02-2009 | Отправлено: 13:34 02-04-2017
VadKomarov



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
YuS_2
Огромное спасибо. Действительно что нужно.
 
ещё вопрос
а можно ли сделать что бы выбиралось РЕСПУБЛИК(А|И) и и допустим учитывать что не все строки могут присутствовать в к примеру

Код:
Республика ХХХХХХХ
ХХХХХ    
ХХХХХ    
Край( область ) ХХХХХХ  
Район ХХХХХХХХ  
Нас.пункт  ХХХХХХХХХ    
 
Республики ХХХХХХХ
Край(область)ХХХХХХ
Нас.пунктХХХХХХХХХ
 

 
 как поменяется при этом весь код
Код:
республика\s*([\s\S]*?)\s*край\s*\(\s*область\s*\)\s*([^\n]*?)\s*\nрайон\s*([^\n]*?)\s*\nнас\.\s*пункт\s*([^\n]*?)\s*\n

Всего записей: 82 | Зарегистр. 01-05-2005 | Отправлено: 15:13 02-04-2017
YuS_2



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VadKomarov

Цитата:
а можно ли сделать что бы выбиралось РЕСПУБЛИК(А|И) и и допустим учитывать что не все строки могут присутствовать в к примеру


Код:
республик(?:а|и)\s*([\s\S]*?)\s*край\s*\(\s*область\s*\)\s*([^\n]*?)\s*\n(?:район\s*([^\n]*?)\s*\n)?нас\.\s*пункт\s*([^\n]*?)\s*\n

Всего записей: 1651 | Зарегистр. 03-02-2009 | Отправлено: 15:39 02-04-2017
VadKomarov



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
YuS_2
Спасибо огромное, теперь буду читать и разбираться как это построено.
Супер!!!
 

Всего записей: 82 | Зарегистр. 01-05-2005 | Отправлено: 17:34 03-04-2017
Uragan66



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Всем добрый день !
Прошу помочь с регулярным выражением в html коде для вебпарсера.
в коде есть такие ссылки
Код:
<img src="http://alsiti.net/Smileys/default/dance2.gif" alt="&#58;jaga&#58;" title="танцует" class="smiley" />

это смайлики, нужно чтобы вебпарсер игнорировал их, для этог сделал замену :

Код:
<img src="http://alsiti.net/Smileys/default/* class="smiley" />':""

но в итоге они всёравно попадают в вывод.
Смайлики могут быть разные, т.е. то что в ссылке выделено жирным нужно заменить на "что-либо"
как правильно это сделать ?
Заранее благодарен за помощь.

Всего записей: 33 | Зарегистр. 18-03-2012 | Отправлено: 13:21 04-05-2017 | Исправлено: Uragan66, 13:23 04-05-2017
YuS_2



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Uragan66

Цитата:
как правильно это сделать ?

Вопрос в том, что ещё надо знать чем именно это будет делаться...
А так:

Код:
Что:(?<=/)[^/]+?\s(?=class="smiley")
Чем:  


Всего записей: 1651 | Зарегистр. 03-02-2009 | Отправлено: 14:05 04-05-2017 | Исправлено: YuS_2, 14:05 04-05-2017
Uragan66



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Вопрос в том, что ещё надо знать чем именно это будет делаться...

YuS_2
замена на "" или на "sm"
 
 
Добавлено:

Цитата:

Код:
А так:
 
Что: (?<=/)[^/]+?\s(?=class="smiley")
Чем:

 
YuS_2 так не работает, пробовал и так :

Код:
'(?<=/)[^/]+?\s(?=class="smiley")':"sm"

и так :

Код:
'<img src="http://alsiti.net/Smileys/default/(?<=/)[^/]+?\s(?=class="smiley") class="smiley" />':"sm"

безрезультатно, замена не происходит.
Чтобы было понятнее это для кода скина райнметра, там используются perl совместимые регулярные выражения.
может я неправильно замену прописал, подскажите, пожалуйста.

Всего записей: 33 | Зарегистр. 18-03-2012 | Отправлено: 14:38 04-05-2017 | Исправлено: Uragan66, 14:59 04-05-2017
YuS_2



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Uragan66

Цитата:
замена на "" или на "sm"


Цитата:
Чтобы было понятнее это для кода скина райнметра

Нет, вопрос не в том, на что менять или где менять, вопрос в том, каким инструментом осуществляется замена... я например, пользуюсь AkelPad-ом
 

Цитата:
perl совместимые регулярные выражения

Вообще-то, предложенное решение - вполне себе PCRE совместимое выражение
 
Добавлено:
YuS_2

Цитата:

Код:
'<img src="http://alsiti.net/Smileys/default/(?<=/)[^/]+?\s(?=class="smiley") class="smiley" />':"sm"


Цитата:
может я неправильно замену прописал

Скорее всего. Вот так, точно замены не будет...

Всего записей: 1651 | Зарегистр. 03-02-2009 | Отправлено: 17:30 04-05-2017 | Исправлено: YuS_2, 17:34 04-05-2017
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Регулярные выражения

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2017

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru