正则表达式 - 匹配而忽略一些字符

时间:2015-09-09 19:19:04

标签: regex

我正在尝试编写一个正则表达式,以最大长度为5位或更长的数字序列,但在进行该分析时,我会忽略任何空格,短划线,填充或散列。这是我到目前为止所拥有的。

(\d|\(|\)|\s|#|-){5,}

这个问题是这将匹配5个字符的任何序列,包括我想忽略的那些字符,所以像“#123”这样的东西会匹配。虽然我确实想忽略#和空格字符,但我仍然需要数字本身为5位或更多才能符合匹配条件。

要清楚,这些将匹配:

1-2-3-4-5
123 45
2(134)   5

如果匹配以数字开头和结尾而不是我排除的那些“特殊字符”中的一个,则奖励积分。 有没有做这种匹配的技巧?

2 个答案:

答案 0 :(得分:1)

所以只需重复一个数字,然后重复任何其他允许字符序列5次或更多次:

def f(s):

如果你减去其中一个重复并在最后添加一个明确的数字,你可以确保它以数字结尾:

^(\d[()\s#-]*){5,}$

答案 1 :(得分:1)

如果我理解要求,你可以使用:

^\d(?:[()\s#-]*\d){4,}$

Tuple

它始终与数字匹配。然后是4个或更多的非捕获组,即(?:[()\s#-]*\d),这意味着任何列出的特殊字符中有0个或更多,后跟一个数字。