Вытащить номер документа через регулярные выражения

Добрый день. Сканирую pdf документ из которого нужно вытащить номер документа. Пример “2 31.10.2016”. (Номер документа здесь 2). Используя регулярное (\s\d\s\d\d\D\d\d\D\d\d\d\d) ищу и потом выделяю просто первое число. Но программа не может найти данную строку. Выражение проверял через regex101.com.

Исходный текст

" Унифицированная форма № КС-3 \r\n Утверждена постановлением Госкомстата России \r\n от 11.11.99 №100 \r\n \r\n Код Г\r\nФорма по ОКУД 0322001 \r\nГосударственный заказчик - государственное казенное учреждение nQ ОКПО 32021015 \r\nУправление капитального строительства Республики Башкортостан \r\nГенеральный подрядчик - Общество с ограниченной ответственностью ОКПО 32039564 \r\nСК “ИМПЕРИЯ” \r\nОбъект - Строительство школы на 825 уч мест в с. Бакалы, Бакалинский по q^q \r\n \r\nрайон \r\n Вид деятельности по ОКДП \r\n Договор подряда номер 04/2016-110 \r\n дата 13.09.2016 \r\n Вид операции \r\n \r\n \r\n Номер Дата | Отчетный период \r\n \r\n Д окуменч составления с по \r\n СПРАВКА 2 31.10.2016 18.10.2016 31 10.2016 \r\n \r\n \r\n О СТОИМОСТИ ВЫПОЛНЕННЫХ РАБОТ И ЗАТРАТ \r\n \r\nНомер Наименование пусковых комплексов, Стоимость выполненных работ и затрат, руб. \r\n этапов, объектов, видов выполненных Код с начала в том числе за \r\nп/п работ, оборудования,затрат проведения с начала года отчетный перио; \r\n работ \r\n1 2 3 4 5 6 \r\n Всего работ и затрат, включаемых в \r\n стоимость работ в том числе: \r\n1 1 372 844,56 1 372 844.56 388 131 38 \r\n \r\n \r\n СМР по Гл. 1-7 \r\n2 Глава 8: Временные здания и 24 711.20 24 711,20 6 98( 5,36 \r\n сооружения 1,8% \r\n3 Итого по Главам 1-8 1 397 555,76 1 397 555,76 395 111 ‘,74 \r\n4 Глава 9: Зимнее удорожание 2,2% 30 746.23 30 746,23 8 692.59 \r\n5 Итого по Главам 1-9 1 428 301 99 1 428 301,99 403 810,33 \r\n6 Непредвиденные затраты 1% 14 283,02 14 283,02 4 038,10 \r\n7 Итого СМР в ценах 2001г. 1 442 585,01 1 442 585,01 407 848,43 \r\n8 СМР в текущих ценах К=5.35 7 717 829,80 7 717 829,80 2 181 989,10 \r\n9 Уступка 0,5% 38 589,15 38 589,15 10 909,95 \r\n10 Итого с уступкой 7 679 240,65 7 679 240,65 2 171 079,15 \r\n11 НДС 18% 1 382 263,32 1 382 263,32 390 794,25 \r\n12 Всего с учетом НДС 9 061 503,97 9 061 503,97 2 561 873,40 \r\n \r\n а ’1 с л \r\n уЧРЕ* \r\n \r\n Государственный заказчик: гроителыству и реконструкции \r\n \r\n Заместитель начальника Управления лр объектов \r\n (по доверенности №10-03 от 11.01.26lf \r\n И.Р Мухаметьянов \r\n \r\n \r\n \r\n Генеральный подрядчик: \r\n Директор ООО СК "Империя’ Р.Р Исламшин \r\n МП \r\n"

@Swatlprus, интересная задача, подумаем. Несколько вопросов.

  1. Нужно именно номер, то есть 2? Или 2 31.10.2016?
  2. Всегда до номера есть слово “СПРАВКА”, а после - “О СТОИМОСТИ”?
  3. Пришлите скриншот, как именно Вы используете регулярное выражение в платформе. Либо можно прямо файл сюда приложить с алгоритмом. Только весь алгоритм не нужно: переменная с исходным текстом и место, где используете регулярку.
  1. Нужно только номер 2. Дату я ищу как исходную точку.
  2. Они есть, но вот порядок не всегда одинаковый

Примеры строк, сканированных документов

Сводка
  1. составления с по \r\n СПРАВКА 2 31.10.2016 18.10.2016 31 10.2016 \r\n \r\n \r\n О СТОИМОСТИ ВЫПОЛНЕННЫХ
  2. составления с по \r\n 3 15 11 2016 01.11 2016 15 11.2016 \r\n \r\n О СТОИМОСТИ ВЫПОЛНЕННЫХ
  3. составления С по \r\n СПРАВКА 1 17 10 2016 13 09.2016 17 10 2016 \r\n \r\n О СТОИМОСТИ ВЫПОЛНЕННЫХ

@Swatlprus, для всех трех примеров ответы допишите.
Плюс, Вы не так задаете регулярное выражение.
Пример тут
Обратите внимание, что Вы подаете на вход строку. Но там не должна быть строка.
Начните с того, что без переменной, просто в match вставьте /<паттерн>/g. Пример: match(/\,/g)

Дописал ответы, находятся в сводке сообщением выше. Изменил поиска шаблона, все равно не работает.

В паттерне попробуйте добавить /g к концу.
И какой результат выдает программа? Что stringGane содержится?

Добавил /g, ничего не находит. stringGane выдает null.

Решил немного изменить шаблон /\D\d\d\D\d\d\D\d\d\d\d/g. Находит даты, все [" 13 09 2016"," 17 10 2016"," 13 09.2016"," 17 10 2016"," 11.01.2016"]. Добавляю в шаблон, чтобы еще одно число было (которое, как раз нам надо), он не находит

Вы шаблон применяете к строке целиковой, то есть ко всему тексту? Или только к той маленькой строке, которая содержит несколько дат, слов и номер?

Шаблон ищет по всему тексту

Сделал по другому. Нашел индекс слова “'составления” (оно находится точно до появления числа) и нашел индекс слова “СТОИМОСТИ” (оно находится точно после необходимых чисел). Через метод slice выделил данный отрезок и по нему искал с помощью шаблона регулярного выражения. Все работает.

P.S. Есть подозрение, что просто большой массив текста не может обработать (но это только догадка)

Нужно проверять, обрабатывать должен. Возможно, ошибка где-то в задании маски или в передаче параметров. Хорошо, что нашли другое решение :slight_smile: