【问题标题】:How to write a python program to identify phoone numbers?如何编写识别电话号码的python程序?
【发布时间】:2022-11-23 01:36:00
【问题描述】:

嗨,我写了一些代码来识别电话号码 但它没有按预期工作 电话号码格式应为 +44-4411109923 +44 等区号是可选的,- 和电话号码前的空格也是可选的。 我在下面写了代码

import re
phoneregex = re.compile(r'[+0-9]?(\s|-)\d{10}')
text = input('Enter your text')
print(phoneregex.findall(text))

但它只识别'-'符号谁能告诉我我在哪里犯错了??

我期待得到一些帮助,以了解我在哪里犯了错误,并学习如何更好地编码。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    我已经修复了您的 phoneregex 模式并创建了一个函数来确定字符串是否代表电话号码。这是代码:

    
    import re
    
    
    def is_phone_number(phone_number: str) -> bool:
        """Determine if string represents a phone number.
    
        A valid phone number is of one of the following forms:
    
        - ``"+xx xxxxxxxxxx"``
        - ``"+xx-xxxxxxxxxx"``
        - ``"+xx - xxxxxxxxxx"``
        - ``"+xx xxxxxx-xxxx"``
        - ``"+xx-xxxxxx-xxxx"``
        - ``"+xx - xxxxxx-xxxx"``
        - ``"xxxxxxxxxx"``
        - ``"xxxxxx-xxxx"``
    
        Where ``"x"`` is a digit. For more details, please refer to the
        examples section.
    
        Parameters
        ----------
        phone_number : str
            The string to check.
    
        Returns
        -------
        bool
            ``True`` if string represents a phone number, ``False`` otherwise.
    
        Examples
        --------
        >>> is_phone_number("+44 - 4411109923")
        True
        >>> is_phone_number("+44-4411109923")
        True
        >>> is_phone_number("4411109923")
        True
        >>> is_phone_number("441110-9923")
        True
        >>> is_phone_number("+44-441110-9923")
        True
        >>> is_phone_number("+44 441110-9923")
        True
        >>> is_phone_number("+44 4411109923")
        True
        >>> is_phone_number("US 4411109923")
        False
        >>> is_phone_number("+44 44111099231010")
        False
        """
        phone_regex = re.compile(
            r'((+[0-9]{2})(s|-|s-s)|)([0-9]{10}|[0-9]{6}-[0-9]{4})'
        )
        match = re.match(phone_regex, phone_number)
        return bool(hasattr(match, 'group'))
    
    
    phone_number = input('Enter your phone number: ')
    if is_phone_number(phone_number):
        print(f'{phone_number} is a valid phone number.')
    
    
    

    笔记

    如果你想保持原来的实现,你可以只替换 phoneregex 函数中使用的 phoneregex 值,就像这样:

    
    import re
    
    phoneregex = = re.compile(
        r'((+[0-9]{2})(s|-|s-s)|)([0-9]{10}|[0-9]{6}-[0-9]{4})'
    )
    text = input('Enter your text')
    print(phoneregex.findall(text))
    
    

    暗示

    有许多网站可以帮助您构建正则表达式模式。我建议使用 regex101 来帮助您创建正确的模式。这是使用 regex101 时如何构建模式的屏幕截图:

    【讨论】:

      猜你喜欢
      • 2011-03-27
      • 2021-11-05
      • 2011-02-17
      • 1970-01-01
      • 2014-01-01
      • 2018-05-25
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      相关资源
      最近更新 更多