2013-05-08 6 views
1

Как я могу найти все экземпляры подстроки в строке?Regexp python - find substring

Например, у меня есть строка ("%1 is going to the %2 with %3"). Мне нужно извлечь все заполнители в этой строке (%1, %2, %3)

Текущий код мог найти только первые два, потому что окончание не является пробелом.

import re 
string = "%1 is going to the %2 with %3" 


r = re.compile('%(.*?) ') 
m = r.finditer(string) 
for y in m: 
print (y.group()) 

ответ

5

Не совпадают на пробельных, матч на границе слова, а не с помощью \b:

r = re.compile(r'%(.*?)\b') 

Вы можете ограничить символы в символы слово только вместо . шаблона, и матч по крайней мере, один характер:

r = re.compile(r'%(\w+)\b') 

Вы не по всей видимости, с помощью захвата группы eith er, так что вы могли бы просто опустить это:

r = re.compile(r'%\w+\b') 
+1

@Alfe: Я сделал, спасибо, что напомнил мне. –

+0

Спасибо Martijn, что, если местозаполнитель должен был измениться с% 1 на% 1%, как я мог извлечь всю эту подстроку? – user1322582

+0

Тогда вы можете просто совпадения со вторым '%': 'r '% (\ w +)%''. –