我正在尝试编写一个正则表达式,以最大长度为5位或更长的数字序列,但在进行该分析时,我会忽略任何空格,短划线,填充或散列。这是我到目前为止所拥有的。
(\d|\(|\)|\s|#|-){5,}
这个问题是这将匹配5个字符的任何序列,包括我想忽略的那些字符,所以像“#123”这样的东西会匹配。虽然我确实想忽略#和空格字符,但我仍然需要数字本身为5位或更多才能符合匹配条件。
要清楚,这些将匹配:
1-2-3-4-5
123 45
2(134) 5
如果匹配以数字开头和结尾而不是我排除的那些“特殊字符”中的一个,则奖励积分。 有没有做这种匹配的技巧?
答案 0 :(得分:1)
所以只需重复一个数字,然后重复任何其他允许字符序列5次或更多次:
def f(s):
如果你减去其中一个重复并在最后添加一个明确的数字,你可以确保它以数字结尾:
^(\d[()\s#-]*){5,}$
答案 1 :(得分:1)
如果我理解要求,你可以使用:
^\d(?:[()\s#-]*\d){4,}$
它始终与数字匹配。然后是4个或更多的非捕获组,即(?:[()\s#-]*\d)
,这意味着任何列出的特殊字符中有0个或更多,后跟一个数字。