|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 宋桓公 于 2016-8-24 18:43 编辑
- re.search(r'(([01]\d\d|2[0-4]\d|25[0-5]|\d\d|\d)\.){3}([01]\d\d|2[0-4]\d|25[0-5]|\d\d|\d)','192.168.41.8')
复制代码
我们可以把最近关键的部分抽离出来,就像C语言中的宏的用法那样:
- import re
- NUM0_255 = r'([01]\d\d|2[0-4]\d|25[0-5]|\d\d|\d)'
- r = re.search("(%s\.){3}%s" % (NUM0_255,NUM0_255),'1e[color=Red]192.168.41.8[/color]oo3o5548')
- print(r)
复制代码
运行结果:
<_sre.SRE_Match object; span=(13, 25), match='192.168.41.8'>
但是还存在一个问题(如版主冬雪雪冬提到的),如果是11192.168.41.8888,任然会匹配出结果192.168.41.88。
这个可能并不是你想要的答案。
于是乎,可以根据匹配的结果继续判断,结果的两段是否是数字,如果是则提示“这可能不是你想要的结果”
程序如下~~
- import re
- def find_span(r,mystr):
- if r == None:
- print("没有匹配到结果")
- return
- str1 = str(r)
- a = str1.find('span') + 6
- b = str1.find(',',a)
- num1 = int(str1[a:b])
- c = str1.find(')',b)
- num2 = int(str1[b+1:c])
- if mystr[num1-1].isdigit() or mystr[num2].isdigit() :#判断匹配的结果两端字符是否为数字
- print(mystr[num1:num2],"可能不是你想要的")
- else:
- print(mystr[num1:num2],"匹配成功")
- NUM0_255 = r'([01]\d\d|2[0-4]\d|25[0-5]|\d\d|\d)'
- mystr = '1e[color=Red]r33192.168.41.833[/color]oo3o5548'
- mystr1 = '日日日日'
- mystr2 = '1e[color=Red]r192.168.41.83[/color]oo3o5548'
- #测试1
- r = re.search("(%s\.){3}%s" % (NUM0_255,NUM0_255),mystr)
- find_span(r,mystr)
- #测试2
- r = re.search("(%s\.){3}%s" % (NUM0_255,NUM0_255),mystr1)
- find_span(r,mystr1)
- #测试3
- r = re.search("(%s\.){3}%s" % (NUM0_255,NUM0_255),mystr2)
- find_span(r,mystr2)
复制代码
测试结果:
192.168.41.83 可能不是你想要的
没有匹配到结果
192.168.41.83 匹配成功
最后想请教下:
<_sre.SRE_Match object; span=(14, 27), match='192.168.41.88'>
这是一个<class '_sre.SRE_Match'>类
那这个类怎么访问呢?
程序中我是用字符串find把14, 27找出来的。
不知道可不可以用<class '_sre.SRE_Match'>类直接访问到?
//----------------------由于给力的版主冬雪雪冬告知如何使用<class '_sre.SRE_Match'>于是程序优化如下----------------------
- import re
- def find_span(r):
- if r == None:
- print("没有匹配到结果")
- return
- a = r.start()
- b = r.end()
- if r.string[a-1].isdigit() or r.string[b].isdigit() :#判断匹配的结果两端字符是否为数字
- print(r.string[a:b],"可能不是你想要的")
- else:
- print(r.string[a:b],"匹配成功")
- NUM0_255 = r'([01]\d\d|2[0-4]\d|25[0-5]|\d\d|\d)'
- mystr = '1e[color=Red]r33192.168.41.833[/color]oo3o5548'
- mystr1 = '日日日日'
- mystr2 = '1e[color=Red]r192.168.41.83[/color]oo3o5548'
- #测试1
- r = re.search("(%s\.){3}%s" % (NUM0_255,NUM0_255),mystr)
- find_span(r)
- #测试2
- r = re.search("(%s\.){3}%s" % (NUM0_255,NUM0_255),mystr1)
- find_span(r)
- #测试3
- r = re.search("(%s\.){3}%s" % (NUM0_255,NUM0_255),mystr2)
- find_span(r)
复制代码
|
|