2014-12-24 4 views
1

Только что начал изучать регулярное выражение. У меня проблема.Получите первые три цифры в каждом промежутке

Это мой код.

match = re.findall(r'\d{1,3}', string) 

Я знаю, что получу каждый третий номер. Но я не знаю, как сказать только каждый пробел.

У меня есть строка, которая выглядит следующим образом:

string = "24812949 2472198 4271748 12472187" 

Я хочу результат, как это:

["248", "247", "427", "124"] 

ответ

2

Используйте границу слова \b. \b соответствует символу слова и символу, отличному от слова.

match = re.findall(r'\b\d{1,3}', string) 

ИЛИ

Отрицательное утверждение просмотра назад. (?<!\S) Утверждает, что совпадению не будет предшествовать символ без пробела.

match = re.findall(r'(?<!\S)\d{1,3}', string) 
1

Вы можете добавить \b как границы слова:

>>> re.findall(r'\b\d{1,3}', string) 
['248', '247', '427', '124'] 

Но если ваша строка всегда в таком виде, вы можете обойтись без регулярных выражений:

>>> [i[:3] for i in string.split()] 
['248', '247', '427', '124'] 
+0

Да, я знал, что могу использовать '[i [: 3] для i в string.split()]'. Но я пытаюсь изучить выражения регулярных выражений;) –

0

Попробуйте решение ниже: -

string="24812949 2472198 4271748 12472187" 
match = re.findall(r'\b\d{1,3}', string) 
print match 

Выход: - [ '248', '247', '427', '124']

1

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

>>> re.findall(r'(\d{1,3})\d*', string) 
['248', '247', '427', '124'] 

Улавливая первые 3 цифры (или меньше, если число меньше) и соответствует остальным разрядам, нет никакого способа следующего совпадения в середине числа. Когда предыдущий матч заканчивается, следующий символ после него, если он есть, должен быть незнаковым, а так как двигатель сканирует слева направо, следующее совпадение начинается с начала строки цифр.

re.findall Функция также возвращает только содержимое в группах захвата, когда в регулярном выражении имеется по крайней мере 1 группа захвата, которая сглаживает весь процесс.

Смежные вопросы