Попробуйте re.search('(?<=@)\d\d\.\d\d\.\d\d\.\d\d(?=\])', line)
.
Фактически, re.search('\d\d\.\d\d\.\d\d\.\d\d', line)
может дать вам то, что вам нужно, если единственное вхождение формата xx.xx.xx.xx в проверяемых строках находится в этих разделах IP-адреса.
РЕДАКТИРОВАТЬ: Как указано в моем комментарии, чтобы найти все вхождения искомого шаблона в строке, вы просто делаете re.findall(pattern_to_match, line)
. Таким образом, в этом случае re.findall('\d\d\.\d\d\.\d\d\.\d\d', line)
(или, в более общем случае, re.findall('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', line)
).
РЕДАКТИРОВАТЬ 2: из вашего комментария это должно работать (с tagname
, являющимся тегом IP-адреса, который вы в настоящее время хотите).
r = re.search(tagname + '\[.+?@(?P<ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})', line)
И тогда вы просто обратитесь к нему с r.group("ip")
, как сказал псамер.
... На самом деле, есть простой способ сделать регулярное выражение более кратким.
r = re.search(tagname + r'\[.+?@(?P<ip>(?:\d{1,3}\.?){4})', line)
На самом деле, вы могли бы даже сделать это:
r = re.findall('(?P<tag>\S+)\[.+?@(?P<ip>(?:\d{1,3}\.?){4})', line)
Что вернет вам список, содержащий теги и связанные с ними IP-адреса, и поэтому вам не придется перепроверять какую-либо одну строку после того, как вы найдете совпадения, если вы хотите сослаться на IP-адрес другого тега из та же строка.
... Фактически, пройдя два шага дальше (дальше?), Вы могли бы сделать следующее:
r = dict((m.group("tag"), m.group("ip")) for m in re.finditer('(?P<tag>\S+)\[.+?@(?P<ip>(?:\d{1,3}\.?){4})', line))
Или в Python 3:
r = {(m.group("tag"), m.group("ip")) for m in re.finditer('(?P<tag>\S+)\[.+?@(?P<ip>(?:\d{1,3}\.?){4})', line)}
И тогда r
будет диктовкой с тегами в качестве ключей и IP-адресами в качестве соответствующих значений.