Python 正则表达式匹配IP地址
(2017-05-09 11:30:14)分类: Python |
IP地址分为4个段,每个段上可能的取值如下
0-9
10-99
100-199
200-249
250-255
0-9
[0-9]
10-99
[1-9][0-9]
100-199
1[0-9][0-9]
200-249
2[0-4][0-9]
250-255
25[0-5]
通常,IP地址以点分十进制方式表示,IP地址分为4段,以点号分隔。要对IP地址进行匹配,首先要对其进行分析,一个简单的正则表达式:
^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$
匹配 0.0.0.0 - 255.255.255.255
它能够完成我们的任务,但是像"394.3.89.342"这种字符串也会被匹配到,而我们IP地址的范围0-255之间的值
所以我们需要更加精确地进行匹配:
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
分析过程:
1、IP地址分为4个段,每个段上可能的取值如下
0-9
10-99
100-199
200-249
250-255
2、正则表达式为:
0-9
[0-9]
10-99
[1-9][0-9]
100-199
1[0-9][0-9]
200-249
2[0-4][0-9]
250-255
25[0-5]
3、进行合并
0-9,10-99,100-199合并为0-199
[01]?[0-9][0-9]?
4、进行组合
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
最后,匹配IP地址的正则表达式为:
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
注意:这个正则表达式是完全匹配IP地址,如果一个字符串除了IP地址,还有其他字符,那么
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
不适用,而应该是:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
前一篇:Python re匹配关键字