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}$
не сработает для вас, поскольку вы, вероятно, захотите получить числа, которые находятся где-то внутри другого текста.