我想创建一个函数,可以传递电话号码列表,然后返回已清理的电话号码列表。
有效电话号码必须以
62
开头,并且必须是除62之外的11位号码。如果清理后,仍然存在无效电话号码,请将其更改为无效号码。
这是电话列表
phone = [
'82123321123',
'082321123321',
'+6282-456-654-456',
'+62 82 789 987 789',
'14045',
'82145-451-145'
]
这是想要的输出:
[6282123321123, 6282321123321, 6282456654456, 6282789987789, 'Invalid Number', 6282145451145]
这是我之前尝试过的代码,有人可以为我的案例添加正确的代码吗..
def clean_phone_number(phone):
adding_62 = "62"
for index, value in enumerate(phone) :
phone[index] = adding_62 + value
for index,value in enumerate (phone) :
symbols = '+-'
[item.translate(symbols).strip()for item in phone]
pass
phone = ['82123321123',
'082321123321',
'+6282-456-654-456',
'+6282789987789',
'14045',
'82145-451-145']
clean_phone_number(phone)
print (phone)
这是一种不使用正则表达式的方法:
def clean_phone_number(num):
num = num.lstrip('+').lstrip('0').replace('-', '')
if not num.startswith('62'):
num = '62' + num
if len(num) != 13:
num = 'Invalid Number'
return num
phones = ['82123321123',
'082321123321',
'+6282-456-654-456',
'+6282789987789',
'14045',
'82145-451-145']
clean_phone_numbers = []
for phone in phones:
clean_phone_numbers.append(clean_phone_number(phone))
print(clean_phone_numbers)
给出:
['6282123321123', '6282321123321', '6282456654456', '6282789987789', 'Invalid Number', '6282145451145']
好的,这个正则表达式应该可以处理您的条件。
\+62[0-9]{11}
但是您需要清理它,因此请删除所有
spaces
和 -
。
注意
+
本身是一个正则表达式函数,因此您需要使用 \
来转义它。[]
显示可能的值,在本例中,我们定义从 ascii '0' 到 ascii '9' 的范围,即 48 到 57。{}
是重复的集合。
如果您不想保留
+
,您可以使用 ^
代替 \+
。^
的意思是开头,所以 ^62
字面上的意思是它以“62”开头,您可以使用 $
来定义它结束。
您可以使用 https://regexr.com/ 获得更好的解释,如果该数字位于文件中,您可以使用 grep。