Python phonenumber regex不够好用

2024-06-17 09:45:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我在代码中使用了以下regex代码:

pattern = re.compile('\d{3,4}(\/?)(\d{6,6})')
m= pattern.match('0481/987421')
if m:
    print "yes"
else:
    print "no"

它是一个正则表达式,应该适用于这样的电话号码:dddd/dddddd 所以先是3到4个数字,然后是不是斜杠,然后是6个数字。 它工作得很好,例如21/484135不起作用,其他错误的事情也不起作用。 但是这个正则表达式的问题是,当我的第一个字符是正确的,并且我在它后面随机输入任何东西,它仍然会输出“yes”。我的意思是这样的:0481/9874214879516874 我认为因为regex匹配前11个字符,所以它返回匹配的结果,而不管后面是什么。在

我怎样才能解决这个问题?在


Tags: no代码reifmatch电话号码数字else
1条回答
网友
1楼 · 发布于 2024-06-17 09:45:16

我建议使用phonenumbers模块,而不是编写自己的正则表达式。下面是一个解析比利时电话号码的示例:

>>> x = phonenumbers.parse("0481/987421", "BE")
>>> x
PhoneNumber(country_code=32,
            national_number=481987421L,
            extension=None,
            italian_leading_zero=False,
            country_code_source=None,
            preferred_domestic_carrier_code=None)

它将对无效电话号码引发异常:

^{pr2}$
网友
2楼 · 发布于 2024-06-17 09:45:16

你需要锚定你的表情。在末尾添加$\Z,以确保后面没有任何内容。您还可以添加^将其锚定在字符串的开头,但与match()一起使用时不需要这样做。在

pattern = re.compile(r"^\d{3,4}/?\d{6}\Z")

相关问题 更多 >