Crossin的编程教室

标题: 正则表达式匹配美国邮政编号 [打印本页]

作者: Tony    时间: 2016-11-15 21:33
标题: 正则表达式匹配美国邮政编号
使用:\d{5}-\d{4}|\d{5}
匹配123456-1234时,结果是:12345
但是,这样:\d{5}-\d{4})|\d{5}
结果却是:['']
请问这是什么情况?谢谢!

作者: crossin先生    时间: 2016-11-16 15:13
123456-1234 这个会优先匹配上 \d{5} 啊,因为第一位开始就可以成功了

不知道你想达到什么目的?
想要判断是否符合美国邮编规则,那你应该加上首尾的限定:
^\d{5}-\d{4}$|^\d{5}$

你给的这个式子本来就不是有效的美国邮编吧,前面有6位。所以理应不通过。
作者: Tony    时间: 2016-11-16 20:47
crossin先生 发表于 2016-11-16 15:13
123456-1234 这个会优先匹配上 \d{5} 啊,因为第一位开始就可以成功了

不知道你想达到什么目的?

我想问的是使用这样:
(\d{5}-\d{4})|\d{5}
匹配:123456-1234时 当匹配到前面5个数时,第六个数不符合"-"这种情况,而满足后一种情况
应该匹配出12345,而结果匹配是[''] 不知道[]里面写上''表示什么,不明白
作者: crossin先生    时间: 2016-11-17 09:54
Tony 发表于 2016-11-16 20:47
我想问的是使用这样:
(\d{5}-\d{4})|\d{5}
匹配:123456-1234时 当匹配到前面5个数时,第六个数不符合"- ...

这里加了括号就变成分组了,你查下python正则关于分组和group的使用。
''是空字符,这里匹配到了,但你匹配的那个规则没有定义分组
你改成
(\d{5}-\d{4})|(\d{5})
或者改用 search + group 的方法,就可以看到你要的后5个数字了
作者: Tony    时间: 2016-11-17 22:00
crossin先生 发表于 2016-11-17 09:54
这里加了括号就变成分组了,你查下python正则关于分组和group的使用。
''是空字符,这里匹配到了,但你匹 ...

哦,原来是这样,非常感谢!




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5