【问题标题】:parsing first character of e164 string separately in python在python中分别解析e164字符串的第一个字符
【发布时间】:2015-04-08 00:40:53
【问题描述】:
def parse_num(raw_phone):
    parsed = ''.join([c for c in raw_phone if c.isdigit() or c == '+'])
    return parsed

我希望在将字符串传递给python-phonenumbers 以进行最终验证之前对其进行清理,因为非数字字符会导致失败。

我已经修改了上面的字符串以删除任何非数字或“+”以使用国际号码。但是,如果字符串后面出现加号,它也不会被删除,导致失败。 我有一个想法如何做到这一点,但我想知道是否有人可以建议一种更清洁的方法。

我正在寻找类似的东西:

[c for c in raw_phone if c.isdigit() or first character == '+']

任何帮助或指向正确方向的任何指示将不胜感激。

【问题讨论】:

    标签: python string parsing phone-number


    【解决方案1】:

    删除除起始 + 符号之外的所有非数字字符有什么问题?

    re.sub(r'(?!^\+)\D', r'', phonenum)
    

    (?!^\+)\D 强制正则表达式引擎匹配任何非数字字符,但不匹配 DEMO

    例子:

    >>> def parsenum(raw_phone):
            return re.sub(r'(?!^\+)\D', r'', raw_phone)
    
    >>> parsenum('+foo456753bar+452')
    '+456753452'
    

    >>> def parsenum(raw_phone):
            res = ""
            if raw_phone[0] == '+':
                res = res + '+'
            for c in raw_phone:
                if c.isdigit():
                    res = res + c
            return res
    
    >>> parsenum('+foo456753bar+452')
    '+456753452'
    

    【讨论】:

    • 这正是我想要的!我遇到了与您的第二个结果类似的结果,但希望尽可能简洁,您的第一个选项是理想的,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-08-29
    • 2022-09-29
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 2013-02-13
    • 2015-07-25
    • 2014-05-26
    相关资源
    最近更新 更多