在 python 中分别解析 e164 字符串的第一个字符

parsing first character of e164 string separately in python

def parse_num(raw_phone):
    parsed = ''.join([c for c in raw_phone if c.isdigit() or c == '+'])
    return parsed

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

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

我正在寻找类似以下内容的内容:

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

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

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

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'