我写了以下正则表达式来匹配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')]
我在这里有两个问题,
感谢您的投入。
答案 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
函数给出了第一个偏好而不是匹配。如果没有组存在,那么它会给予匹配的优先权。