/ / Regex невірно ідентифікує рядок (Python) - python, regex

Regex неправильно ідентифікує рядок (Python) - python, regex

Я використовую онлайн-налагоджувач regex Regexr (www.regexr.com), яка правильно визначає працюючу та непрацюючу Regex для мене здебільшого. Однак я застряг у двох конкретних регулярних виразах, які Regexr визначає як працюючі правильно, але вони не виграють у моїй роботі Перший, який я використовую, щоб знайти PGP-ключі, зокрема заголовок та колонтитул.

[-]{5}[A-Z]{3,5}sPGPsMESSAGE[-]{5}[^.]

і я використовую його для виявлення:

-----BEGIN PGP MESSAGE-----

і

-----END PGP MESSAGE-----

Мій інший регекс, який не виграв у реальній реалізації, полягає у визначенні номерів паспортів Великобританії:

b[0-9]{10}GB[RP][0-9]{7}[UMF]{1}[0-9]{9}b

приклади, які працюють у regexr:

7086493126GBR6510204M150224602

1234567890GBP1234567F123456712

Може хтось запропонує зрозуміти, чому це не спрацює?

Відповіді:

0 для відповіді № 1

Я думаю, що ваша проблема є заключною частиною регулярного вираження: [^.]

Це буде відповідати будь-якому персонажу, який не єбуквальний період. Я не думаю, що це було вашим призначенням для цього, і це, безумовно, призведе до того, що регулярний вираз не сам по собі відповідає початковому та кінцевому повідомленням.

Просто, щоб було зрозуміло - поки . як правило, метахарактер, всередині [] це просто буквальний характер.

Що стосується ідентифікаторів паспорта ГБ, я "повинен був би бачити рядок у більш контекстному контексті, але проблема майже виразно пов'язана зі метахарактеризами слова.


0 для відповіді № 2

Я завжди користуюся https://regex101.com/ перевірити мої регулярні вирази. Він точно пояснює, що робить ваш регулярний вираз, і повідомляє, чи відповідає ваш рядок.

Спробуй!

Якщо ви не можете визначити проблему з цим, регулярне вираження, ймовірно, не є проблемою.

Використовуючи regex101, я думаю, що це може працювати краще: ^[-]{5}[A-Z]{3,5}sPGPsMESSAGE[-]{5}$

Якщо ви читаєте опис на [^.] в ньому йдеться "відповідати одному символу, якого немає в списку нижче. Буквальний символ" .".