Python中如何从文本中提取IP地址
jdbc:mysql://10.0.151.205:3306 -> 10.0.151.205:3306
感觉用正则会很快,但是不是很懂正则。还有什么特殊的技巧吗?
Python中如何从文本中提取IP地址
不懂 py 的来打混下
不知道 py 能不能转成 string 再处理……
import re
def extract_ips(text):
"""
从文本中提取所有IPv4地址
ip_pattern解释:
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) 匹配0-255的数字
\. 匹配点号
{3} 重复三次(构成前三个数字和点号)
最后再匹配一次0-255的数字(第四个数字段)
"""
ip_pattern = r'\b(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' \
r'(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' \
r'(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' \
r'(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b'
return re.findall(ip_pattern, text)
# 使用示例
sample_text = """
服务器日志示例:
192.168.1.1 - 用户登录成功
10.0.0.138 - 文件下载
无效地址: 999.999.999.999
另一个有效IP: 172.16.254.1
本地地址: 127.0.0.1
"""
ips_found = extract_ips(sample_text)
print("找到的IP地址:", ips_found)
# 输出: ['192.168.1.1', '10.0.0.138', '172.16.254.1', '127.0.0.1']
这个正则表达式能准确匹配0.0.0.0到255.255.255.255范围内的IPv4地址,过滤掉像999.999.999.999这样的无效地址。如果需要匹配IPv6地址,得用另一个正则表达式。
用正则表达式提取IP地址最直接。
如果字符串固定,只是 IP 会不同,那么按照字符串长度截取不失为一种方法
不是很懂正则就学一下啊, 30 分钟入门教程
(\d+?.){3}\d+?.:\d+?
哎呀多了个点
匹配 ip 的正则表达式,网上太多了,随便搜一下就是答案
正则:[\d{1,3}.]+\d{1,3}:\d{4}
re.match(r’^.+//(?P<ip>\d{1,3}(.\d{1,3}){3}).+$’, ‘jdbc:mysql://10.0.151.205:3306 -> 10.0.151.205:3306’).group(‘ip’)
不能帮助你更多了 :P
print ‘jdbc:mysql://10.0.151.205:3306 -> 10.0.151.205:3306’.split(’->’)[1].split(’:’)[0].strip()
端口号的位数也会变
说错了,是 jdbc:mysql://10.0.151.205:3306 变成 10.0.151.205
额,我以为是 docker 那种端口映射关系的字符串
搞定了,感谢。 print ‘’‘jdbc:mysql://10.0.151.205:3306’’’.split(’/’)[-1].split(’:’)[0]
这样也可以的 记住 split rsplit lsplit 是一组函数 他第二个参数非常有用的
>>> a.rsplit(’:’, 1)[0].rsplit(’/’, 1)[-1]
‘10.0.151.205’
>>> ip_data
’jdbc:mysql://10.0.151.205:3306’
>>> rule
’.*//(?P<ip>\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}:\d{1,5})’ #端口号有五位数的啊
>>> re.match(rule, ip_data).group(‘ip’)
'10.0.151.205:3306
nice


