darchir 发表于 2021-5-7 11:54:07

Python小白求助正则表达式

Python小白求助 :
自己写了个正则表达式,匹配IP地址,没有用到重复符号{},而是笨方法,感觉应该没错,为啥最后一位匹配不上?

re.search(r'((\d\d|2\d|25)\.){2}(\d\d|2\d|25|\d|\d\d)\.(\d\d|2\d|25|\d|\d\d)', '192.168.96.58')
<re.Match object; span=(0, 12), match='192.168.96.5'>

如果最后是一位就没问题
re.search(r'((\d\d|2\d|25)\.){2}(\d\d|2\d|25|\d|\d\d)\.(\d\d|2\d|25|\d|\d\d)', '192.168.9.8')
<re.Match object; span=(0, 11), match='192.168.9.8'>

求大神指点!

suchocolate 发表于 2021-5-7 12:08:16

本帖最后由 suchocolate 于 2021-5-7 12:11 编辑

多个选项用管道符的话,相对详细匹配的放前面,粗的匹配放后面。
\d 比 \d\d 匹配的多,所以\d放后面,不然匹配一个就结束了,后面re就不看了。
import re

result = re.search(r'((\d\d|2\d|25|\d\d|\d)\.){3}(\d\d|2\d|25|\d\d|\d)',
          'aaaa 192.168.96.58 cccc')
print(result)
另外你的代码里用了{}{:10_256:}
另外\d\d可以优化成 \d,防止匹配01这种情况。

darchir 发表于 2021-5-7 13:03:44

suchocolate 发表于 2021-5-7 12:08
多个选项用管道符的话,相对详细匹配的放前面,粗的匹配放后面。
\d 比 \d\d 匹配的多,所以\d放后面,不 ...

谢谢!涨姿势{:10_264:}

123Marchapril 发表于 2021-5-11 21:33:50

suchocolate 发表于 2021-5-7 12:08
多个选项用管道符的话,相对详细匹配的放前面,粗的匹配放后面。
\d 比 \d\d 匹配的多,所以\d放后面,不 ...

你好小甲鱼正则表达式匹配IP地址是这样写的:
re.search(r'{0,1}\d{0,1}\d|2\d|25', '206')
但是我觉得这样就行了吧:
re.search(r'{0,1}\d{0,1}\d|2\d|25', '206'),我去掉了从左往右数的第一个0,第一个0没什么意义吧?
页: [1]
查看完整版本: Python小白求助正则表达式