我已经修复了您的 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 时如何构建模式的屏幕截图: