【发布时间】:2015-06-20 10:36:19
【问题描述】:
我是 Python 编程新手。现在我正在努力简化我现有的代码。下面是练习:开发一个匹配电话号码的模式,格式为(xxx) xxx-xx-xx AND xxx-xxx-xx-xx。到目前为止我想出了什么:
patt = "\(?\d{3}\)?\s?-?\d{3}-\d{2}-\d{2}"
完美运行。但问题很明显:如果我有一个可选模式,比如"(specific-patter-ffddff445%$#%)--ds",在某种固定模式之前,我将不得不放“?”可选模式中每个符号之前的符号。如何组合所有符号并仅放置一个“?”标记?
【问题讨论】:
-
您的问题不清楚。这是一个练习还是一个真正的问题?如果是后者 - 从字符串中删除所有非数字字符并检查您是否留下了 10 位数字。这应该涵盖所有特殊用例。
-
我也不确定我是否理解。您可以使用组使子模式成为可选:
(?:xyz)?使整个字符串xyz成为可选。但是如果你想说每个字符都是可选的,独立于其他字符,你必须写x?y?z?。没有捷径。