正确的正则表达式匹配模式的完全n个实例

时间:2014-11-11 01:15:13

标签: python regex

假设我有以下内容:

1.) /some/text/here/with-dashes/010101/
2.) /some/text/here/too/
3.) /some/other/really-long/text/goes/here/019293847/

我想获得包含6 /正确的字符串到目前为止,这些正则表达式无法按照我的意图进行操作:

(/\w+[-]?\w+){6}
(/\w+[-]?\w+){6,6}
(/\w+[-]?\w+){,6}?

这些正则表达式还匹配超过6 /的字符串我希望它匹配字符串且完全为6 /

2 个答案:

答案 0 :(得分:6)

正如六个匹配项的正确语法是{6},如第一个示例所示。

你正在使用的正则表达式匹配超过六次目标字符串的原因是它们没有锚定到字符串的开头和结尾。如果一个字符串有(比方说)十次出现的路径组件,则它与前六个匹配,因此计数。

要解决此问题,请使用例如:

^(/\w+[-]?\w+){6}$

或允许可选的结束斜线:

^(/\w+[-]?\w+){6}/?$

答案 1 :(得分:0)

考虑more_itertools.exactly_n第三方库。

<强>代码

iterable = "1.) /some/text/here/with-dashes/010101/"
pred = lambda x: x == "/"
n = 6

mit.exactly_n(iterable, n, pred)
# True

<强>测试

f = mit.exactly_n

assert f("1.) /some/text/here/with-dashes/010101/", n, pred) == True
assert f("2.) /some/text/here/too/", n, pred) == False
assert f("3.) /some/other/really-long/text/goes/here/019293847/", n, pred) == False