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