清洁电话

问题描述 投票:0回答:2

我想创建一个函数,可以传递电话号码列表,然后返回已清理的电话号码列表。

有效电话号码必须以

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)
python data-cleaning
2个回答
0
投票

这是一种不使用正则表达式的方法:

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']

0
投票

好的,这个正则表达式应该可以处理您的条件。

\+62[0-9]{11}

但是您需要清理它,因此请删除所有

spaces
-

注意

+
本身是一个正则表达式函数,因此您需要使用
\
来转义它。
[]
显示可能的值,在本例中,我们定义从 ascii '0' 到 ascii '9' 的范围,即 48 到 57。
最后
{}
是重复的集合。

如果您不想保留

+
,您可以使用
^
代替
\+

^
的意思是开头,所以
^62
字面上的意思是它以“62”开头,您可以使用
$
来定义它结束。

您可以使用 https://regexr.com/ 获得更好的解释,如果该数字位于文件中,您可以使用 grep。

© www.soinside.com 2019 - 2024. All rights reserved.