正则表达式[或(在python中

时间:2010-08-30 16:23:44

标签: python regex

我需要以

的形式提取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)

但它不起作用。

ADDED

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)

似乎有效。

6 个答案:

答案 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来自用户输入,这是非常重要的;你不希望别人能够在那里粘上正则表达式并破坏你的程序。
  • 在网站名称和IP地址之间使用\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更喜欢这个