在Python中匹配长度大于八个字母的正则表达式
尽管我尝试掌握grep和相关的GNU软件,但我还是没能完全搞懂正则表达式。我喜欢它们,但看起来总是有点让人头疼。
我想这个问题对某些人来说并不难,但我花了好几个小时试图在我最喜欢的书中查找长度超过某个值的单词,最后写出来的代码真的是丑得不行:
twentyfours = [w for w in vocab if re.search('^........................$', w)]
twentyfives = [w for w in vocab if re.search('^.........................$', w)]
twentysixes = [w for w in vocab if re.search('^..........................$', w)]
twentysevens = [w for w in vocab if re.search('^...........................$', w)]
twentyeights = [w for w in vocab if re.search('^............................$', w)]
... 每个长度都写了一行,从某个长度到另一个长度。
我想要的其实是能简单地说“给我所有长度超过八个字母的单词。”我该怎么做呢?
5 个回答
11
.{9,}
表示“超过八个字符”,.{8,}
表示“八个或更多字符”
或者你也可以直接用 len(w) > 8
来判断
19
\w 可以匹配字母和字符,{min,[max]} 让你可以定义大小。像这样的表达式
\w{9,}
会匹配所有由9个或更多字符组成的字母和数字组合。
37
这件事其实不需要用正则表达式。
result = [w for w in vocab if len(w) >= 8]
不过如果非要用正则表达式的话:
rx = re.compile('^.{8,}$')
# ^^^^ {8,} means 8 or more.
result = [w for w in vocab if rx.match(w)]
可以查看这个链接 http://www.regular-expressions.info/repeat.html,里面详细讲解了 {a,b}
这种写法。