我在 Python 中遇到问题,程序必须检查用户是否以有效格式输入电话号码,例如:(111)-111-1111
我使用 Python 正则表达式 re.findall
函数让这个程序工作,但是,后来我意识到该程序允许用户输入任意数量的括号,例如: (((( (111)-111-1111
并且这仍然会作为有效格式通过程序。
问题。有没有办法将括号的数量限制为 (111)-111-1111
格式?
我的代码如下:
import re
number=input("Please enter phone number: " )
x=re.findall('([(+*)]\d{3}[(+*)][a-]\d{3}[a-]\d{4})', number)
if (x):
print("Perfect! Your format is valid: --> " "'"+number+"'")
else:
print("Not a valid format, please enter as (###)-###-####")
最佳答案
您的代码已经非常接近运行了。 您只需将示例调整为:
import re
number=input("Please enter phone number: " )
x=re.match('^([(+*)]\d{3}[(+*)][a-]\d{3}[a-]\d{4})$', number)
if (x):
print("Perfect! Your format is valid: --> " "'"+number+"'")
else:
print("Not a valid format, please enter as (###)-###-####")
当您检查数字是否遵循模式(正则表达式)并且不希望提取时,您不使用 findall
,而是使用 match
其中的一些子信息。
此外,您还需要在正则表达式中添加 anchor (^
、$
),以强制输入字符串在开头或结尾不包含其他字符。
输出:
Please enter phone number: '(111)-111-1111'
Perfect! Your format is valid: --> '(111)-111-1111'
Please enter phone number: '(((((111)-111-1111'
Not a valid format, please enter as (###)-###-#
关于python正则表达式将括号限制为一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54758203/