处理正则表达式

时间:2018-06-05 15:37:24

标签: python-3.x

我想匹配以下格式的ip地址, 例如:.1.9.2 ...... 1.6.8 ...... 2.3.4 ...... 1.3.4。 不确定如何匹配数字之间的点。

2 个答案:

答案 0 :(得分:1)

找出解决方案..所以基本问题是base64decoding是如何完成的。它取决于操作系统。因此,在某些机器上它正在解码并以[1.9.2 ... 1.6.8 ... 2.5.4 ... 1.2.2。]的形式显示ip,对于这样的输入,上述代码完美地工作。 但我在一些机器上观察到相同代码n python版本的输出有不同的格式,所以在这种情况下上面的代码会失败。最好的解决方案是将base64字符串解码为一致的格式。 经过多次尝试后,观察到将编码解码转换为“utf-16'导致提供更好的可读字符串,现在正常显示ip:192.168.254.122所以你可以使用基本的ip match regex并继续前进。

答案 1 :(得分:0)

这应该是你要找的东西:

/([0-9]\.[0-9]\.[0-9])|([0-9]\.[0-9])|([0-9])/g

https://regexr.com/3qihj


说明:

有三个捕获组(用括号表示):一个用于三个数字,一个用于两个数字,一个用于一个数字。然后使用管道进行OR运算字符。

使用反斜杠转义匹配数字之间的点,因为正则表达式中的点字符是一个元字符,用于匹配除换行符之外的任何字符。

正则表达式引擎应该输出一个长度为4的数组,对应于IP地址的所有四个部分。中间的单个点将包含在每个结果中,但三点分隔符不会。

使用Python脚本进行更新

我已经稍微更改了正则表达式以使用Python 适用于https://www.tutorialspoint.com/execute_python_online.php

import re
ip = 'W.i.n.3.2._.O.p.e.r.a.t.i.n.g.)h.t.t.p.:././.1.2...1.6.8...4...1.3.5./'

ip = ip.split("h.t.t.p.:././.")[1]
result = re.findall('([0-9]\.[0-9]\.[0-9])|([0-9]\.[0-9])|([0-9])', ip)
ipaddress = ""
for x in range(0, len(result)):
    if len(result[x][0]) > 0:
        ipaddress += result[x][0].replace('.','')
    if len(result[x][1]) > 0:
        ipaddress += result[x][1].replace('.','')
    if len(result[x][2]) > 0:
        ipaddress += result[x][2].replace('.','')
    if(x < len(result) -1):
        ipaddress+= '.'
print (ipaddress)