2013-03-12 6 views

ответ

2

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

>>> import re 
>>> x = "From: Joyce IP: 192.111.1.1 Source: 192.168.1.1" 
>>> re.sub(r'\w+:\s', '', x) 
'Joyce 192.111.1.1 192.168.1.1' 

Однако, если вы предпочитаете использовать re.findall() здесь один вариант, который похож на ваш текущий подход:

>>> ' '.join(re.findall(r'(?<=:\s)\S+', x)) 
'Joyce 192.111.1.1 192.168.1.1' 

Вам нужен \s в отрицательном 'назад, потому что есть пробел после каждой из двоеточия в вашем входе строка.

+0

, что это именно то, что я говорю о том, что это легко для кого-то еще черт возьми, извините, спросил FJ, почему вы использовали sub вместо поиска findall? – PythonNewbie

+0

@PythonNewbie Я добавил версию, которая использует findall, но мне обычно легче понять выражения, которые не используют lookbehind или lookahead, и использование субмарок, что возможно. –

+0

Хм, я понимаю, спасибо всем! – PythonNewbie

0

небольшие изменения в код (не удалить пробелы, и включить их в вид сзади) отлично работает:

import re 

x = "From: Joyce IP: 192.111.1.1 Source: 192.168.1.1"  
m = re.findall('(?<=:\s)\S+', x) 
print " ".join(m) 
Смежные вопросы