Проверьте, имеет ли строка определенный формат - PullRequest
0 голосов
/ 03 апреля 2019

Я хочу проверить, соответствует ли строка формату, который я даю в качестве входных данных, например:

Из списка строк я хочу извлечь ту, которая имеет следующий формат:

***.***.*** 

где * - все числа.

Я искал регулярное выражение, но не мог понять достаточно хорошо, чтобы реализовать его.

Ответы [ 3 ]

2 голосов
/ 03 апреля 2019

Это определенно работа для регулярных выражений. Простое регулярное выражение для этого шаблона может быть

\d\d\d\.\d\d\d\.\d\d\d

«\ d» обозначает любую цифру, а «\». является символом точки с пробелом (потому что "." является специальным символом в регулярном выражении.) С библиотекой python re, вероятно, будет использоваться метод findall с этим шаблоном,

list_of_matches = re.findall("\d\d\d\.\d\d\d\.\d\d\d", my_string)

1 голос
/ 03 апреля 2019

Мы можем попробовать использовать re.findall по следующей схеме:

\b\d{3}\.\d{3}\.\d{3}\b

Пример кода:

input = "here some number 123.456.789 for testing"
matches = re.findall(r'\b\d{3}\.\d{3}\.\d{3}\b', input)
print(matches)

['123.456.789']

Использование re.findall является хорошим выбором, поскольку это также означает, что вы можете захватить более одного совпадения во входной строке.

0 голосов
/ 03 апреля 2019

Это должно сработать.Строка регулярного выражения ^[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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...