【发布时间】:2013-02-24 21:27:01
【问题描述】:
开发移动(以色列)电话号码正则表达式。目前我有
re.compile(r'^[\(]?0?(5[023456789])\)?(\-)?\d{7}$')
它涵盖了大多数用例。只有出现第一个括号时,问题才匹配第二个括号。
所以 (055)-5555555 或 (055)5555555 或 0555555555 将匹配 但是:055)-5555555 不会。 我知道我可以使用 2 个正则表达式来测试条件(如果第一个匹配另一个条件的测试),但这似乎不是一个聪明的解决方案。
我想我需要一些类似正则表达式的东西,但不知道如何使用它,或者我正确理解了这个概念
编辑:解释逻辑
区号:应以 5 开头,然后是一个数字(来自特定列表),前面有一个选项 0。也可能在括号内。 然后是一个可选的连字符 和 7 位数字
澄清:只有当另一个括号存在时,我才需要匹配两个括号,第一个也是如此,不仅是第二个,错过了这一点
【问题讨论】:
-
无需将左括号放在字符组中。
\(?就够了。 -
regular-expressions.info有很好的解释
-
你能列出逻辑要求而不是要求我们剖析你的正则表达式吗?
-
h = re.compile(r'^[\(]{0,1}0?(5[023456789])\)?(\-)?\d{7}$') -
环顾四周寻找重复的字符,而不是匹配的字符。您应该捕获括号并测试您有 0 或 2。
标签: python regex regex-lookarounds