Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用regexp检查并保存电话号码_Python_Regex - Fatal编程技术网

Python 使用regexp检查并保存电话号码

Python 使用regexp检查并保存电话号码,python,regex,Python,Regex,我想检查一下俄罗斯/哈萨克斯坦的手机(以+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!) 7

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

+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 
并将其保存为
7xxxxxxxxx
格式(国家代码+10个数字,不带+

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

现在如何以所需格式保存结果?我应该编写另一个regexp,并将其应用于上面的regexp的结果(
re.search(“(\d{10})$”,result_over)
),还是有更好的方法在一个regexp表达式中获得格式化结果


注意:我的regexp适用于数字,但如果我用-或()输入数字,它将失败。我可以避免吗?

看看这个任务是如何完成的可能会有帮助。它与谷歌对话、Facebook、Android等使用的库相同

Android库本身不是Python,而是遗留下来的。同一个库有一个积极维护的并行库

你可以玩一个游戏,看看这是否适合你的需要


试图用正则表达式稳健地解析一个非平凡的电话号码是很困难的。有无数的变种。我建议寻找和使用一个好的图书馆

看看这项任务是如何完成的可能会有所帮助。它与谷歌对话、Facebook、Android等使用的库相同

Android库本身不是Python,而是遗留下来的。同一个库有一个积极维护的并行库

你可以玩一个游戏,看看这是否适合你的需要


试图用正则表达式稳健地解析一个非平凡的电话号码是很困难的。有无数的变种。我建议寻找和使用一个好的图书馆

根据NullUserException和ilya所说的,下面是一个例子:

读入用户提供的信息,去掉除数字以外的任何内容: 检查7或9起动条件:
根据NullUserException和ilya所说的,下面是一个示例:

读入用户提供的信息,去掉除数字以外的任何内容: 检查7或9起动条件:
我对电话号码的建议是,让用户输入他们想要的任何符号。然后去除任何非数字的内容,并验证其位数和位数是否正确。然后只在数据库中存储数字。现在,您将具有一致性,您可以在向用户显示时根据需要对其进行格式化。例如,对于美国号码,它可以采用任何格式,如:
+1 XXX-XXX-XXXX
(XXX)XXX-XXXX
XXX-XXX-XXXX
,等等。我不在乎。我去掉任何不是数字的东西,然后选中:
1?(\d{10})
(10位数字前加可选的1)。然后我只存储10位数字,现在我可以根据自己的喜好格式化它。这就是我要做的。我只检查数字是否以7或9开头(除了国家代码)。在我的问题中,我问如何剥离用户的输入并准备好保存:)我会做一些类似的事情:
re.search(r'^([7-9])?([79]\d{9}$',re.sub(r'\d+','',number)).groups()
re.search(r'^\+?[78]?([79]\d{9}$','+79231234567')
几乎像我想要的那样工作(thnx NullUserException!),除了我对电话号码的建议是,让用户输入他们想要的任何符号。然后去除任何非数字的内容,并验证其位数和位数是否正确。然后只在数据库中存储数字。现在,您将具有一致性,您可以在向用户显示时根据需要对其进行格式化。例如,对于美国号码,它可以采用任何格式,如:
+1 XXX-XXX-XXXX
(XXX)XXX-XXXX
XXX-XXX-XXXX
,等等。我不在乎。我去掉任何不是数字的东西,然后选中:
1?(\d{10})
(10位数字前加可选的1)。然后我只存储10位数字,现在我可以根据自己的喜好格式化它。这就是我要做的。我只检查数字是否以7或9开头(除了国家代码)。在我的问题中,我问如何剥离用户的输入并准备好保存:)我会做一些类似的事情:
re.search(r'^([7-9])?([79]\d{9}$',re.sub(r'\d+','',number)).groups()
re.search(r'^\+?[78]?([79]\d{9}$','+79231234567')
工作方式几乎和我想要的一样(thnx NullUserException!),除了感谢与JS的链接之外,看起来很有希望。我以前见过它,但尽管它只保存和格式化数字,不验证它们。对于我的项目来说,也许它甚至比正则表达式更好:)感谢与JS的链接,看起来很有希望。我以前见过它,但尽管它只保存和格式化数字,不验证它们。也许对我的项目来说,它甚至比正则表达式更好:)
import re
phone_num = raw_input("Phone number. номер телефона\n)

only_nums = int(''.join(re.findall(r'\d', phone_num)))
if only_nums[0] == 7 || only_nums[0] == 9:
  print only_nums