Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2021, 20:31   #1
alanatolich
Пользователь
 
Регистрация: 26.07.2013
Сообщений: 22
По умолчанию Регулярные выражения, поиск в результате поиска

Здравствуйте.
Не нашёл информации о том, можно ли в регулярных выражениях искать в результате предыдущего поиска.
Пример задачи.
Текст.

999781873231 1417 17.09.2021,08:44
******39**50667617
0716293246********
051027******68**89
------------------
04**23**47****7488
**1221317359******
09********52657784
999781886746 5460 17.09.2021,08:44
0317**37******7684
**1325**425569****
07**2232**54****81
------------------
06**26****506179**
**10**364859****88
0514**33****6277**
999781762221 1710 17.09.2021,08:10
**1223****52**7690
0215**3144**65****
******3841586778**

Шаблон регулярки для поиска "([\*\d]{18})"

Данная регулярка находит сроки вида "******39**50667617", как одним регулярным выражением найти в этой строке допустим цифру 17, как дополнить шаблон "([\*\d]{18})"?
Пробовал Просмотр вперёд и назад, как работает Поиск по условию не понял.

Прошу помощи.
alanatolich вне форума Ответить с цитированием
Старый 01.10.2021, 20:57   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

"[\*\d]{16}([\*\d])[\*\d]" - в первой группе будет 17я цифра.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 02.10.2021, 10:15   #3
alanatolich
Пользователь
 
Регистрация: 26.07.2013
Сообщений: 22
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
"[\*\d]{16}([\*\d])[\*\d]" - в первой группе будет 17я цифра.
Вижу вопрос не так прочли, не 17-тую цифру, а цифру 17.

Ваше выражение ищет 17-тую позицию, а мне нужна цифра 17 в этой строке в любой позиции.

Последний раз редактировалось alanatolich; 02.10.2021 в 10:28.
alanatolich вне форума Ответить с цитированием
Старый 02.10.2021, 10:48   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Цифры 17 не существует. 17 - это или число, или строка цифр. Цифр всего 10: '0,'1.....'9 . Ну, 16-ричных цифр немного больше

Последний раз редактировалось digitalis; 02.10.2021 в 10:52.
digitalis вне форума Ответить с цитированием
Старый 02.10.2021, 10:54   #5
alanatolich
Пользователь
 
Регистрация: 26.07.2013
Сообщений: 22
По умолчанию

alanatolich,
Цитата:
Сообщение от digitalis Посмотреть сообщение
Цифры 17 не существует. 17 - это или число, или строка цифр. Цифр всего 10: '0','1'.....'9'
Спасибо за просветительскую деятельность, в области терминологии арабских закорючек.
Может у вас и регулярка есть, как найти ЧИСЛО 17

По идеи находиться в два этапа
"([\*\d]{18})" - нужная строка
"17" нужное число

Но надо за одно регулярное выражение

Последний раз редактировалось BDA; 03.10.2021 в 06:05.
alanatolich вне форума Ответить с цитированием
Старый 02.10.2021, 11:05   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Не, я в этих регуляторах не секущ. Просто моя буквоедская натура подсказывает, что невозможно найти то, чего в природе не существует.
На Delphi это было бы как 2 байта переслать:
Код:
   i := Pos('17',str) ;
«Очень трудно искать черную кошку в темной комнате, особенно, если там ее нет». © не Конфуций
digitalis вне форума Ответить с цитированием
Старый 02.10.2021, 11:35   #7
alanatolich
Пользователь
 
Регистрация: 26.07.2013
Сообщений: 22
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Не, я в этих регуляторах не секущ. Просто моя буквоедская натура подсказывает, что невозможно найти то, чего в природе не существует.
На Delphi это было бы как 2 байта переслать:
Код:
   i := Pos('17',str) ;
На Delphi сложнее будет, надо еще сначала строку найти в тексте а уж потом
Код:
   i := Pos('17',str) ;
И то это
Код:
   i := Pos('17',str) ;
только позиция, а не число 17-ть

Последний раз редактировалось alanatolich; 02.10.2021 в 11:38.
alanatolich вне форума Ответить с цитированием
Старый 02.10.2021, 11:57   #8
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Ну дык зная позицию, строку в число перегнать - кошке чихнуть. Да и зачем перегонять - ведь мы знаем, что ищем. "Вот вам искомое вами число 17, оно в этой строчке есть, начиная с позиции i".
Что до "найти строку" - то при чтении текстового файла он и читается построчно. А если это всё лежит навалом в бинарном массиве, то находим строку по символам <CR><LF> .
Впрочем, это уже мимо темы. Найти можно, и очень легко. Но ведь требуется "очень регулярным выражением, причём - одним" . На жаль...

Последний раз редактировалось digitalis; 02.10.2021 в 12:00.
digitalis вне форума Ответить с цитированием
Старый 02.10.2021, 12:45   #9
alanatolich
Пользователь
 
Регистрация: 26.07.2013
Сообщений: 22
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Ну дык зная позицию, строку в число перегнать - кошке чихнуть. Да и зачем перегонять - ведь мы знаем, что ищем. "Вот вам искомое вами число 17, оно в этой строчке есть, начиная с позиции i".
Что до "найти строку" - то при чтении текстового файла он и читается построчно. А если это всё лежит навалом в бинарном массиве, то находим строку по символам
Просто перебор текста по переносам, не даст искомую строку в 18 символов с наличием 2х значных чисел и символа "*", тут еще проверку надо на соответствие нужному шаблону, что усложняет код на Delphi.

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

Надеюсь найдутся сильные программисты, дадут ответ.

Цитата:
Сообщение от digitalis Посмотреть сообщение
то находим строку по символам <CR><LF>
А переносы могут быть, не только богомерзкие виндовые, но и юниксовы и маковые, тоже доп условия и параметры, когда можно обойтись мощной штукой как регулярка, но как, вот в чем вопрос)))

Последний раз редактировалось BDA; 03.10.2021 в 06:05.
alanatolich вне форума Ответить с цитированием
Старый 02.10.2021, 18:06   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

"^(?=[\*\d]{18})(?=.{0,16}17).{18}" - как сделать без двух просмотров вперед не придумал.
Цитата:
Если у вас есть проблема и вы решили использовать регулярные выражения, у вас уже две проблемы.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярные выражения. Поиск номеров firafs C++ Builder 1 06.11.2017 17:49
Регулярные выражения.Поиск нескольких строк подряд -Jack- Паскаль, Turbo Pascal, PascalABC.NET 0 23.09.2017 04:53
регулярные выражения ZoxWatt PHP 2 26.11.2014 16:04
Регулярные выражения - поиск пустой строки furstenberg Общие вопросы Delphi 15 27.08.2012 18:10
регулярные выражения для поиска и замены Елена Гох Microsoft Office Access 7 18.01.2011 19:39