Используйте Regex, чтобы найти шаблон, который включает в себя специальные символы и отклонить, если они следуют другим шаблонам - PullRequest
0 голосов
/ 18 февраля 2020

Я хочу найти один из следующих шаблонов в тексте:

space or line start + 4 digits + space or line end

space or line start + 4 digits + "-" (optional) + 1 character (digit or letter "x") + space or line end

Это будет выглядеть примерно так:

8638-x
86381
8638-1
8638

Я пытался использовать ниже, но, согласно для regex101.com, «-x» не выбирается

(\d{4})|((\d{4}\-\d{1})|(\d{4}\-(?i)[x]))

Важно, что приведенный ниже шаблон будет отклонен, если найден (в случае, если мой OCR не может правильно структурировать):

"\d{3}\.?\d{3}?\d{3}\-?\d{2}"

1 Ответ

1 голос
/ 18 февраля 2020

Можно сопоставить 4 цифры, а затем необязательную группу, которая будет соответствовать необязательному дефису и либо цифрам, либо x

\b\d{4}(?:-?[\dx])?\b
  • \b Граница слова
  • \d{4} Совпадение 4 цифр
  • (?: Группа без захвата
    • -?[\dx] Совпадение необязательно - и либо ди git, либо x
  • )? Закрыть группу и сделать ее необязательной
  • \b Граница слова

Regex demo

Если поддерживаются lookarounds, вы можете использовать:

(?<!\S)\d{4}(?:-?[\dx])?(?!\S)

Regex demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...