regexp匹配python中的IP地址

时间:2015-08-04 05:47:55

标签: python regex

我写了以下正则表达式来匹配IP地址,

x = 'IP is 200.185.24.24'
y = re.findall('([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-2][0-3])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])',x)

我得到以下答案,

>>> y
[('200', '185', '24', '2')]

我在这里有两个问题,

  1. 为什么我的桅杆八位音在这里失败了。休息工作正常。
  2. 当您看到上面的模式时,我重复了相同的操作,以匹配IP地址的第2个,第3个和第4个八位字节。有没有一种简单的方法来表示这种重复的模式。我猜tcl中的\ d是重复(不确定)。我在python中寻找类似的东西。
  3. 感谢您的投入。

1 个答案:

答案 0 :(得分:0)

将正则表达式中存在的所有捕获组转换为非捕获组。而且最好使用单词边界,否则你必须像(?:large-pattern|medium-pattern|small-pattern)

那样颠倒模式
y = re.findall('\b(?:[1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-2][0-3])\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])\b',x)

你得到上面的输出主要是因为re.findall函数给出了第一个偏好而不是匹配。如果没有组存在,那么它会给予匹配的优先权。