如何解决提取电话号码并转换为whatsapp格式
我是 Python 新手,我需要在 Zapier 自动化中使用它。 在我的自动化中,我想将电话号码从各种格式转换为特定格式(whatsapp url 目的)。 如何使用 python 提取以下输入并将其转换为特定输出?
输入:
+62 812-3456-7890
62081234567890
6281234567890
+6281234567890
081234567890
(62)81234567890
(62)081234567890
(+62)81234567890
(+62)081234567890
输出:
6281234567890
附加信息: “62”是印度尼西亚的国家代码 通常为 8-12 位数字,包括在“8nn”前加上“0”
提前致谢
解决方法
这不是最佳解决方案,但我想让它保持非常简单,因为您是 Python 初学者。
def decode(number: str):
chars = ['+','(',')','-',' ']
for c in chars:
number = number.replace(c,'')
return number
print(decode('+62 812-3456-7890'))
print(decode('(62)81234567890'))
chars
是您要从数字中删除的 list
个字符。
编辑 我试图测试你在问题中给出的每一个数字,我发现上面的代码不能像你想要的那样工作。这是我的新解决方案,它通过了所有测试:
def decode(number: str):
chars = ['+','')
if number.startswith('0'):
number = number[1:]
if not number.startswith('62'):
number = f'62{number}'
if number[2] == '0':
number = number.replace('0','',1)
return number
tests = """+62 812-3456-7890
62081234567890
6281234567890
+6281234567890
081234567890
(62)81234567890
(62)081234567890
(+62)81234567890
(+62)081234567890"""
for num in tests.split('\n'):
print(decode(num))
我添加了一些 if
语句来处理所有测试异常,还为您提供的每个测试用例添加了测试。
测试结果:
6281234567890
6281234567890
6281234567890
6281234567890
6281234567890
6281234567890
6281234567890
6281234567890
6281234567890
,
另一种思考问题的方法是,不要识别要扔的字符,而是保留数字:
# pylint: disable=no-member
也可以写成列表推导式:
def decode(number):
out = []
for c in number:
if c.isnumeric():
out.append(c)
return ''.join(out)
,
要删除非整数字符,请使用正则表达式方法。 [^0-9]
指定所有非 0-9 的字符,然后将其替换为空字符串。
import re
def decode(input):
output = re.sub('[^0-9]',input)
return output
列表理解可能更直观一些。我们本质上构建一个只包含数字字符的数组,然后返回连接后的数组。
def decode(input):
output = [n for n in input if n.isnumeric()]
return ''.join(output)
因此,如果我们想通过测试用例,还需要做一些工作(即如果没有国家代码,则添加国家代码并删除国家代码和实际电话号码之间的零)。
def get_phonenum(input):
# remove all non-numeric characters from the phone number
only_digits = decode(input)
# assuming that the inputs are constrained to country code 62
only_digits = only_digits if only_digits[:2] == '62' else '62' + only_digits
# remove zero between country code and actual phone number
phone_num = only_digits[:2] + only_digits[3:] if only_digits[2] == '0' else only_digits
return phone_num
运行
test = ['+62 812-3456-7890','62081234567890','6281234567890','+6281234567890','081234567890','(62)81234567890','(62)081234567890','(+62)81234567890','(+62)081234567890']
for t in test:
print(get_phonenum(t))
输出
6281234567890
6281234567890
6281234567890
6281234567890
6281234567890
6281234567890
6281234567890
6281234567890
6281234567890
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。