Как определить серию чисел внутри абзаца - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть параграф / предложение, из которого я хочу идентифицировать

  1. любую серию из 6 цифр или более
  2. любую серию чисел с "-" (da sh)

но я не хочу идентифицировать

  1. любые числа, перед которыми стоит $ (доллар)
  2. любой серии чисел с, (запятая)

Как мне этого добиться?

Регулярное выражение, которое я пробовал: r'(?:\s|^)(\d-?(\s)?){6,}(?=[?\s]|$)', но оно не точное.

Я ищу эти шаблоны внутри абзаца

  • 123-456-789
  • 123-456
  • 123 456
  • 123 456 789 Он также может содержать полный стоп (.) В конце, но он должен игнорировать следующие шаблоны

  • $ 123654

  • $ 123654
  • 12,4569
  • 123 * 123 *7732* 1043 *
  • 123h434k5454

1 Ответ

1 голос
/ 20 апреля 2020

Вы можете сопоставить то, что вам не нужно, и захватить в группе то, что вы хотите сохранить.

Используя re.findall будут возвращены значения группы 1.

После этого вы можете отфильтровать пустые строки.

(?<!\S)(?:\$\s*\d+(?:\,\d+)?|(\d+(?:[ -]\d+)+\.?|\d{3,}))(?!\S)

По частям

  • (?<!\S) Утвердить границу пропуска слева
  • (?: Группа без захвата
    • \$\s* Совпадение со знаком доллара, 0+ пробельных символов
    • \d+(?:\,\d+)? Совпадение 1+ цифр с необязательной частью запятой
    • | Или
    • ( Захват группа 1
      • \d+ Совпадение 1+ цифр
      • (?:[ -]\d+)+\.? Повтор пробела или - 1+ с последующим необязательным .
      • | Или
      • \d{3,} Совпадение 3 или более цифр (Или используйте {6,} для 6 или более
    • ) Закрыть группу 1
  • ) Закрыть группу без захвата
  • (?!\S) Утвердить границу пропуска справа

Regex demo | Python demo * 1 065 * | Другой Python демо

Например

import re

regex = r"(?<!\S)(?:\$\s*(?:\d+(?:\,\d+)?)|(\d+(?:[ -]\d+)+\.?|\d{3,}))(?!\S)"

test_str = ("123456\n"
    "1234567890\n"
    "12345\n\n"
    "12,123\n"
    "etc...)

print(list(filter(None, re.findall(regex, test_str))))

Выход

['123456', '1234567890', '12345', '1-2-3', '123-456-789', '123-456-789.', '123-456', '123 456', '123 456 789', '123 456 789.', '123 456 123 456 789', '123', '456', '123', '456', '789']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...