我是Python编程的新手。现在,我正在努力简化现有代码。以下是练习:开发一种格式与(xxx) xxx-xx-xx
和xxx-xxx-xx-xx
格式的电话号码相匹配的模式。到目前为止,我提出了什么:
patt = "\(?\d{3}\)?\s?-?\d{3}-\d{2}-\d{2}"
完美无缺。但问题很明显:如果我有某个固定模式之前的可选模式,比如"(specific-patter-ffddff445%$#%)--ds"
,我将不得不放置"?"在可选模式中的每个符号之前的符号。如何组合所有符号并只放一个"?"标记
答案 0 :(得分:1)
所以你所拥有的是各种不正确的格式。例如:
012)345-67-89
(012 345-67-89
您想要的是一个选项,正则表达式为您提供:https://docs.python.org/3.4/library/re.html#regular-expression-syntax
这样的事情会更好:
patt = '(?:\(\d{3}\) |\d{3}-)\d{3}-\d{2}-\d{2}'
这将匹配 "(xxx)"或" xxx - "作为" xxx-xx-xx"的前缀。并且不会匹配上面列出的任何错误字符串。
?
只应在其操作内容真正可选的情况下使用。