Задать вопрос
@6ReD6

Какое регулярное выражение использовать, что бы достать из текста все цифры?

Добрый лень! Подскажите пожалуйста какой задать паттерн регулярного выражения, что бы из строки достать все номера, даты и прочие части которые содержат цифры? Например есть такая строка "Перенос остатков денежных средств с л/с 05564П56000 на л/с 05564Ф56010 сложившихся по состоянию на 01.01.2023г. на основании письма от 27.12.2022г. №НП-03-24/32768" и нужно из неё вытащить, то что выделено жирным. Заранее спасибо!

Может быть я просто немного сумбурно сформулировал вопрос. Поступает таблица в Excel, которая может быть заполнена под завязку, т.е. можете быть под миллион строк. В этой таблице есть столбец, который заполняется руками и никаких ограничений и требований по заполнению этого столбца - нет. То есть люди его заполняют как им нравится. В этом столбце могут содержатся ИНН, КПП, номера лицевых счетов, номера договоров, номера исполнительных листов, даты и т.д. Причем все эти данные могут состоят как из цифр, так и из буквенно-цифровых символов. Вот я и подумал, что возможно есть паттерн чтобы вытащить эти данные. Порядок совершенно не важен, так же как и знак "№" и буква "г" в конце дат.
  • Вопрос задан
  • 795 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 4
@Akina
Сетевой и системный админ, SQL-программист.
\S*\d\S*
https://regex101.com/r/bzUbiN/1

нужно из неё вытащить, то что выделено жирным

Показанный результат не соответствует условию. С какого перепугу в последнем токене отрезан начальный символ "№"? а в третьем и четвёртом - финальное "г."?
Ответ написан
Комментировать
sotvm
@sotvm
Умный поймёт, а дураку и так всё равно.
\d*
но если текст большой-много строк, то придётся заморочится иначе никак
и в один проход это не сделать
Ответ написан
Комментировать
@alexalexes
Сначала пишите патерн для лицевого счета, ориентируясь на "л/с" и на пробел после номера (см. Позитивный просмотр вперед/назад).
Отдельно пишите патерн, чтобы получать даты (тупо по точкам и обязательному количеству цифр между ними).
Потом пишите патерн, чтобы вытащить номер № - это посложней, так как только вы можете проанализировать, какие номера могут быть, но можно заглядыванием назад ловить номер (и опционально пробел) и читать до следующего пробела.
Если порядок нахождения не важен, можете тупо по очереди сканировать текст этими тремя патернами.
Если важен, то делаете один патерн из всех через пропуск определенного кол-ва символов (.)+ - обернуть нужно также как с условным просмотром вперед/назад.
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
л/с \d{5}[А-ЯЁ]\d{5} пять цифр, буква, пять цифр
дата \d{2}\.\d{2}\.\d{4} \d{2}-\d{2}-\d{4} \d{4}-\d{2}-\d{2}
любые "слова" (строки отделенные пробелами или началом/концом строки) с цифрами внутри \S*\d+\S* https://regex101.com/r/LLHAjD/1
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы