|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
看了教学视频中取IP地址代码是
re.search(r'(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])', '192.168.1.1')
虽然可以成功取得IP,但是这个代码如果一边写一边测试就会发现有问题,如果只取IP地址的第一段(不加点),那么[01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5],这段代码如果取200以上的数值就会出现问题,只能取3位当中的前两位,举例234,只能取到23.换句话说 ,视频中的例子 如果取234.234.234.234,那么只能得到234.234.234.23.
我发现如果调换这个匹配条件是可以解决的我的代码如下
re.search(r'((25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]?\d?\d)', '234.234.234.234')是可以的.
但是造成这种情况的原因我还是不太明白.
我认为应该是因为|位于前面的优先。
re.search(r'(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])', '234.234.234.234')中,最后一段[01]{0,1}\d{0,1}\d优先于25[0-5]导致[01]{0,1}\d{0,1}\d取了23,
得到的结果就是234.234.234.23。
而至于为什么前面为什么不是23而是234,是因为前面的格式必须符合"x."
假如是"[01]{0,1}\d{0,1}\d"优先取23了,那么23后面必须紧跟".",但是23后面还有个4,导致"[01]{0,1}\d{0,1}"\d不符合规则,所以紧接着符合规则的"25[0-5])\"优先。
|
|