我需要以
的形式提取IP地址prosseek.amer.corp.com [10.0.40.147]
或
prosseek.amer.corp.com (10.0.40.147)
使用Python。如何使用Python获取任何一个IP的IP?我开始时喜欢
site = "prosseek.amer.corp.com"
m = re.search("%s.*[\(\[](\d+\.\d+\.\d+\.\d+)" % site, r)
但它不起作用。
m = re.search("%s.+(\(|\[)(\d+\.\d+\.\d+\.\d+)" % site, r)
m.group(2)
m = re.search(r"%s.*[([](\d+\.\d+\.\d+\.\d+)" % site, r)
m.group(1)
似乎有效。
答案 0 :(得分:3)
您不需要在字符组中转义元字符(*
,(
,)
,.
,...)({{1除外)除非它是字符组中的第一个字符; ]
将匹配方括号序列。)
关于Python的另一个提示是使用[][]+
- 样式字符串。有了它们,反斜杠没有特别的意义。 r'...'
将打印r'\\'
,因为反斜杠没有特殊含义:
\\
在上面的字符串中它没有任何区别,因为m = re.search(r"%s.*[([](\d+\.\d+\.\d+\.\d+)" % site, r)
在Python中没有任何意义,但在涉及\d
,\r
等内容时它让生活更轻松。
答案 1 :(得分:1)
使用
[([]
外括号内的字符按字面意思。你不需要用反斜杠来逃避它们。
例如:
import re
site = "prosseek.amer.corp.com "
m = re.search("%s\s*[([](\d+\.\d+\.\d+\.\d+)" % site, 'prosseek.amer.corp.com (10.0.40.147)')
答案 2 :(得分:1)
我想对你所拥有的东西进行一些细微的改进:
site = "prosseek.amer.corp.com"
m = re.search(r"%s\s+[([](\d+\.\d+\.\d+\.\d+)" % re.escape(site), r)
m.group(2)
变化是:
site
传递给re.escape
,以便按字面解释;否则域名中的点可以匹配任何字符。如果site
来自用户输入,这是非常重要的;你不希望别人能够在那里粘上正则表达式并破坏你的程序。\s+
代替.+
,以便它只接受空格。答案 3 :(得分:1)
re.findall("(?:\d{1,3}\.){3}\d{1,3}", site)
答案 4 :(得分:0)
你怎么忽略括号?
site = "prosseek.amer.corp.com"
m = re.search("%s.*(\d+\.\d+\.\d+\.\d+)" % site, r)
答案 5 :(得分:0)
import string
site='prosseek.amer.corp.com (10.0.40.147)'
''.join([c for c in site if c not in string.ascii_letters+' []()']).strip('.')
出于某种原因,我比regex更喜欢这个