1

我想检查俄罗斯/哈萨克斯坦的手机(以 +7 9x 或 +7 7x 开头),但resintaxis 完全让我大吃一惊。
我想接受这种格式的数字:

+7 9XX XXXXXXX 
+7 7XX XXXXXXX 
7 7XX XXXXXXX
7 9XX XXXXXXX
8 9XX XXXXXXX   (8 is domestic replace for country code)
8 7XX XXXXXXX  
9XX XXXXXXX     (9 numbers, no country code!)
7XX XXXXXXX 

并将它们保存为7XXXXXXXXXX格式(国家代码+ 10 个数字,没有+

我写了这个:
re.search(r'^(\+?79?|\+?77?|89?|87?|9|7)(\d{9})$','+79221234567').groups()

我现在如何以需要的格式保存结果?我是否应该编写另一个正则表达式,将其应用于上面 ( re.search('(\d{10})$',result_above)) 的正则表达式的结果,还是有更好的方法在一个正则表达式表达式中获取格式化结果?

PS:我的正则表达式适用于数字,但如果我用 - 或 () 输入数字,它将失败。我可以避免吗?

4

2 回答 2

1

了解Google Android如何执行此任务可能会有所帮助。它与 Google Talk、Facebook、Android 等使用的库相同。

Android 库本身不是 Python,但概念仍然存在。有一个积极维护的同一库的并行Python 端口

您可以使用它的Javascript 版本来查看它是否符合您的需求。

尝试使用正则表达式稳健地解析一个重要的电话号码是很困难的。有无数种变体。我建议找到并使用一个好的库。

于 2013-01-14T16:06:17.703 回答
0

离开 NullUserException 和 ilya 所说的,这里有一个例子:

从用户处读取信息并去掉除数字之外的任何内容:

import re
phone_num = raw_input("Phone number. номер телефона\n)

only_nums = int(''.join(re.findall(r'\d', phone_num)))

检查 7 或 9 的起始条件:

if only_nums[0] == 7 || only_nums[0] == 9:
  print only_nums
于 2013-01-15T01:38:32.513 回答