python正则表达式将括号限制为一次

标签 python regex

我在 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/

相关文章:

javascript - 避免前瞻正则表达式中的长模式重复 - 如何简化?

python - 其他替换单个字符的方法

python - 如何使用Python在CSV的每一行末尾删除逗号?

python - 如何用模式拆分 2 列?

regex - 内存部分的 Sed 用法

regex - Unix 查找通配符目录结构

python - 主力进程意外终止 RQ 和 Scrapy

python - boolean 值有两个可能的值。是否存在具有三个可能值的类型?

regex - 使用正则表达式匹配多个更改

python - 用于删除空格的正则表达式