提取 phone 号码并转换为 whatsapp 格式
Extract phone number and convert to whatsapp format
我是 python 的新手,我需要在我的 Zapier 自动化中使用它。
在我的自动化中,我想将 phone 数字从各种格式转换为特定格式(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 = ['+', '(', ')', '-', ' ']
for c in chars:
number = number.replace(c, '')
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
另一种思考问题的方法是,不要确定要抛出的字符,只需保留数字即可:
def decode(number):
out = []
for c in number:
if c.isnumeric():
out.append(c)
return ''.join(out)
也可以写成列表推导式:
def decode(number):
return ''.join( c for c in number if c.isnumeric() )
要删除非整数字符,这里有一个正则表达式方法。 [^0-9]
指定所有不是0-9的字符,然后用空字符串替换。
import re
def decode(input):
output = re.sub('[^0-9]', '', input)
return output
列表理解可能更直观一些。我们实际上构建了一个仅包含数字字符的数组,然后 return 连接数组。
def decode(input):
output = [n for n in input if n.isnumeric()]
return ''.join(output)
所以如果我们想通过测试用例,需要做更多的工作(即如果有 none 添加国家代码并删除国家代码和实际 [= 之间的零27=]个数).
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
我是 python 的新手,我需要在我的 Zapier 自动化中使用它。 在我的自动化中,我想将 phone 数字从各种格式转换为特定格式(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 = ['+', '(', ')', '-', ' ']
for c in chars:
number = number.replace(c, '')
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
另一种思考问题的方法是,不要确定要抛出的字符,只需保留数字即可:
def decode(number):
out = []
for c in number:
if c.isnumeric():
out.append(c)
return ''.join(out)
也可以写成列表推导式:
def decode(number):
return ''.join( c for c in number if c.isnumeric() )
要删除非整数字符,这里有一个正则表达式方法。 [^0-9]
指定所有不是0-9的字符,然后用空字符串替换。
import re
def decode(input):
output = re.sub('[^0-9]', '', input)
return output
列表理解可能更直观一些。我们实际上构建了一个仅包含数字字符的数组,然后 return 连接数组。
def decode(input):
output = [n for n in input if n.isnumeric()]
return ''.join(output)
所以如果我们想通过测试用例,需要做更多的工作(即如果有 none 添加国家代码并删除国家代码和实际 [= 之间的零27=]个数).
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