在python中使用正则表达式查找IP地址

时间:2011-10-26 18:39:26

标签: python regex

我正在尝试解析TSHARK捕获的结果

以下是我要过滤的行:

Internet Protocol, Src: 10.10.52.250 (10.10.52.250), Dst: 224.0.0.2 (224.0.0.2)

我正在尝试提取Src和Dst,

这是我的代码:

str(re.search("Src:\s[0-9\.]{7-15}", a, re.I|re.M).group())[5:]
str(re.search("Dst:\s[0-9\.]{7-15}", a, re.I|re.M).group())[5:]

当我运行它时,我一直没有匹配,但是当我在正则表达式中使用IP地址的确切长度时,它可以工作。即

str(re.search("Src:\s[0-9\.]{9}", a, re.I|re.M).group())[5:]

工作得很好。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

查看Python regex howto,不应该是{7,15}吗?

答案 1 :(得分:3)

for match in re.finditer(r"\((\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))\b\)", subject):

这应匹配任何IPV4 IP地址。实际IP被捕获到组1中。

虽然你的正则表达式可能有用,但它很危险,因为999.999.999.999 是有效的,但它会匹配。

答案 2 :(得分:2)

不太好:

text = 'fasga@fas#2*^127.0.0.1tfgws5151'

pattern = r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
pattern_re = re.compile(pattern)
ip_address = pattern_re.findall(text)

答案 3 :(得分:0)

尝试使用{7,15}

str(re.search("Src:\s[0-9\.]{7,15}", a, re.I|re.M).group())[5:]
str(re.search("Dst:\s[0-9\.]{7,15}", a, re.I|re.M).group())[5:]

此外,您应首先检查某个群组是否存在(或在其周围放置try / except):

groupFound = re.search("Src:\s*[\d\.]{7,15}", a, re.I | re.M)
if groupFound:
    str(groupFound.group())[5:]

# or:

try:
    str(re.search("Src:\s*[\d\.]{7,15}", a, re.I | re.M).group())[5:]
except AttributeError:
    # handle it