【问题标题】:Extract phone number and convert to whatsapp format提取电话号码并转换为whatsapp格式
【发布时间】:2021-08-29 20:16:46
【问题描述】:

我是 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 zapier


    【解决方案1】:

    这不是最佳解决方案,但我想保持它非常简单,因为您是 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
    

    【讨论】:

      【解决方案2】:

      另一种思考问题的方法是,不要识别要折腾的字符,而是保留数字:

      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() )
      

      【讨论】:

        【解决方案3】:

        要删除非整数字符,请使用正则表达式方法。 [^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
        

        【讨论】:

        • 请记住,他在问题中提供了测试用例,并且您的解决方案始终有效。例如在这种情况下:62081234567890
        猜你喜欢
        • 1970-01-01
        • 2016-04-05
        • 2013-03-19
        • 2011-01-16
        • 2013-11-13
        • 1970-01-01
        • 1970-01-01
        • 2022-01-05
        • 1970-01-01
        相关资源
        最近更新 更多