Проверьте, имеет ли строка определенный формат

#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 здесь является хорошим выбором, потому что это также означает, что вы можете зафиксировать более одного совпадения во входной строке.