Python Regular Expression Match Все 5 цифр, но не больше

Я пытаюсь привести в соответствие 5-значные коды купонов, распространяемые по всей веб-странице HTML. Например, 53232, 21032, 40021 и т.д. Я могу обрабатывать более простой случай любой строки из 5 цифр с помощью [0-9]{5}, хотя это также соответствует 6, 7, 8... n разрядным номерам, Может кто-нибудь, пожалуйста, предложите мне изменить это регулярное выражение, чтобы оно соответствовало только пятизначным числам?

Ответы

Ответ 1

>>> import re
>>> s="four digits 1234 five digits 56789 six digits 012345"
>>> re.findall(r"\D(\d{5})\D", s)
['56789']

если они могут возникать в самом начале или в самом конце, легче вставить строку, чем беспорядок со специальными случаями

>>> re.findall(r"\D(\d{5})\D", " "+s+" ")

Ответ 2

полная строка: ^[0-9]{5}$

внутри строки: [^0-9][0-9]{5}[^0-9]

Ответ 3

Без заполнения строки для начала и конца конкретного случая, как в ответе John La Rooy, можно использовать негативы lookahead и lookbehind для обработки обоих случаев с помощью одно регулярное выражение

>>> import re
>>> s = "88888 999999 3333 aaa 12345 hfsjkq 98765"
>>> re.findall(r"(?<!\d)\d{5}(?!\d)", s)
['88888', '12345', '98765']

Ответ 4

Очень простой способ состоял бы в том, чтобы сопоставлять все группы цифр, например, с r'\d+', а затем пропускать каждое совпадение длиной не пять символов при обработке результатов.

Ответ 5

Примечание.. При использовании \D существует проблема, так как \D соответствует любому символу, который не является цифрой, вместо этого используйте \b. \b важна здесь, поскольку она соответствует границе слова, но только в конце или в начале слова.

import re  

input = "four digits 1234 five digits 56789 six digits 01234,56789,01234"


re.findall(r"\b\d{5}\b", input)  

result : ['56789', '01234', '56789', '01234']

но если вы используете   re.findall(r "\ D (\ d {5})\D", s)   output: ['56789', '01234'] \ D не может обрабатывать запятую или любые введенные цифры.

\ b является важной частью здесь, она соответствует пустой строке, но только в конце или в начале слова.

Дополнительная документация: https://docs.python.org/2/library/re.html

Подробнее Разъяснение использования \D vs \b:

В этом примере используется \D, но он не отображает все пять цифр.

В этом примере используется \b при записи всех пятизначных цифр.

Приветствия

Ответ 6

Вероятно, вам нужно сопоставить не цифру до и после строки из 5 цифр, например [^0-9]([0-9]{5})[^0-9]. Затем вы можете захватить внутреннюю группу (нужная строка).

Ответ 7

Вы можете попробовать

\D\d{5}\D

или, возможно,

\b\d{5}\b

Я не уверен, что python рассматривает строки и пробелы там.

Я считаю, что ^\d{5}$ не сработает для вас, поскольку вы, вероятно, захотите получить числа, которые находятся где-то внутри другого текста.