Извлечение номера из строки с помощью регулярных выражений [закрыто]

Вопрос или проблема

У меня есть несколько текстовых блоков. Текст содержит статью и ее номер в различных форматах. Текст содержит несколько блоков и заголовок самой статьи с номером. В тексте статьи могут быть числа, но они не нужны. Мне нужен только номер статьи.

Например

должен найти 8

 СТАТЬЯ 8 какой-то текст с датой 13.07.2001

должно быть 8

 СТАТЬЯ 8. Какой-то текст 

должно быть 8.1

 СТАТЬЯ 8.1. какой-то текст

должно быть 8-1

СТАТЬЯ 8-1. какой-то текст 

Я использую следующее регулярное выражение

СТАТЬЯ (\d+([.-]\d+)?)

Но я могу поймать, как следующее

 СТАТЬЯ 8-1

кто может помочь с регулярным выражением, чтобы получить номер статьи во всех случаях?

Ответ или решение

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

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

Постановка задачи

Необходимо извлекать только номера статей, которые могут быть представлены в разных форматах:

  • Целое число: ARTICLE 8
  • Десятичное число: ARTICLE 8.1
  • Число с дефисом: ARTICLE 8-1
  • Число с разделителем точка: ARTICLE 8.

Некоторые примеры, которые нужно правильно обработать:

  1. ARTICLE 8 some text form date 13.07.20018
  2. ARTICLE 8. Some text8
  3. ARTICLE 8.1. some text8.1
  4. ARTICLE 8-1. some text8-1

Как видно, в тексте могут встречаться другие числа, которые не должны быть частью результата.

Разработка регулярного выражения

Проблема с текущим регулярным выражением ARTICLE (\d+([.-]\d+)?) заключается в том, что оно не обрабатывает все требуемые случаи. Давайте доработаем его так, чтобы он соответствовал всем описанным сценариям.

Рекомендуемое регулярное выражение:

ARTICLE\s+(\d+(?:[.-]\d+)?)
Объяснение регулярного выражения:
  • ARTICLE — буквальное совпадение со словом "ARTICLE".
  • \s+ — один или более пробелов, которые могут следовать за словом "ARTICLE".
  • (\d+ — группа захвата, соответствующая одной или более цифрам.
  • (?:[.-]\d+)? — необязательная группа, которая соответствует:
    • [.-] — одному из символов: точка или дефис.
    • \d+ — одной или более цифрам, после разделителя.
  • ) — закрывающая скобка для группы захвата.

Применение регулярного выражения

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

import re

text_blocks = [
    "ARTICLE 8 some text form date 13.07.2001",
    "ARTICLE 8. Some text",
    "ARTICLE 8.1. some text",
    "ARTICLE 8-1. some text",
]

regex = r"ARTICLE\s+(\d+(?:[.-]\d+)?)"

for block in text_blocks:
    match = re.search(regex, block)
    if match:
        print(match.group(1))  # Выведет номер статьи

Заключение

Используя предложенное регулярное выражение, вы сможете точно извлекать номера статей из текстовых блоков, независимо от формата их записи. Регулярные выражения — мощный инструмент для обработки текста, который, при правильном использовании, значительно упрощает жизнь разработчиков и специалистов по данным.

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

Оцените материал
Добавить комментарий

Капча загружается...