#python #regex #string
#python #регулярное выражение #строка
Вопрос:
Я хочу проверить, соответствует ли строка формату, который я даю в качестве входных данных, например:
Из списка строк я хочу извлечь ту, которая имеет следующий формат:
***.***.***
где * — это все числа.
Я искал о регулярном выражении, но не смог понять достаточно хорошо, чтобы реализовать его.
Ответ №1:
Это должно сработать. Строка регулярного выражения — это ^[0-9] .[0-9] .[0-9] $
где я сопоставляю каждую цифру ровно 3 раза и проверяю, находится ли разделитель ‘.’ посередине. ^ и $ обозначают начало и конец строки
>>> import re
>>> re.match('^[0-9]{3}.[0-9]{3}.[0-9]{3}$','111.222.333')
<_sre.SRE_Match object at 0x10f98cb28>
>>> re.match('^[0-9] .[0-9] .[0-9] $','a11.22.33b')
>>> re.match('^[0-9] .[0-9] .[0-9] $','1a1.22.3b3')
>>> re.match('^[0-9] .[0-9] .[0-9] $','11.2a2.33')
Комментарии:
1. он также будет соответствовать
*.*.*
,**.**.**
,****.****.****
и т.д. Поэтому не подходит для данного формата.2. Отредактировано соответствующим образом
Ответ №2:
Это определенно работа для регулярных выражений. Простое регулярное выражение для этого шаблона может быть
ddd.ddd.ddd
» d» обозначает любую цифру, а «.» — это символ экранированной точки (потому что «.» — это специальный символ в регулярном выражении.) В библиотеке python re, вероятно, будет использоваться метод findall с этим шаблоном,
list_of_matches = re.findall("ddd.ddd.ddd", my_string)
Ответ №3:
Мы можем попробовать использовать re.findall
со следующим шаблоном:
bd{3}.d{3}.d{3}b
Пример кода:
input = "here some number 123.456.789 for testing"
matches = re.findall(r'bd{3}.d{3}.d{3}b', input)
print(matches)
['123.456.789']
Использование re.findall
здесь является хорошим выбором, потому что это также означает, что вы можете зафиксировать более одного совпадения во входной строке.