分页: 1 / 1

正则表达式分组问题

发表于 : 2013-09-26 21:40
ceclinux
问下,为什么正则表达式
(\d{1,3}\.){3}\d{1,3}
192.168.1.3
匹配
的分组情况是
图片
不懂分组匹配的是最后一个(1.),而不是192.或者168.
希望能讲下原理

Re: 正则表达式分组问题

发表于 : 2013-09-26 22:03
oneleaf
(\d{1,3}\.){3}\d{1,3} =》 \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

这样明白了没?

Re: 正则表达式分组问题

发表于 : 2013-09-26 23:38
ceclinux
oneleaf 写了:(\d{1,3}\.){3}\d{1,3} =》 \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

这样明白了没?
一叶亲自回答 :em80
可能是我没讲清楚,这个正则我不懂的地方是分组的匹配,分组只匹配了{3}里面的最后一个,而非每个分组都匹配,这里不懂,谢谢了

Re: 正则表达式分组问题

发表于 : 2013-09-27 9:30
oneleaf
正常啊,由于你只定义了一个分组,因此只反应出最后一个匹配的子字符串。

代码: 全选

>>> re.match(r'(\d{1,3}\.){3}\d{1,3}','192.168.2.5').groups()
('2.',)
>>> re.match(r'(\d{1,3}\.)(\d{1,3}\.)(\d{1,3}\.)\d{1,3}','192.168.2.5').groups()
('192.', '168.', '2.')

Re: 正则表达式分组问题

发表于 : 2013-09-27 11:13
eexpress
用{3}扩展以后,我也不清楚变成什么了。
你少用有歧义的正则就是。
通常如果要分段获取,肯定不会这样去写。
split 一次到数组就是。