【发布时间】:2018-10-07 06:17:21
【问题描述】:
我想写一个正则表达式,它检查句子中每个单词的长度,如果所有单词的长度至少为 3,则返回True。另外,整个句子只能是小写字母。例如,对于字符串“hello world”,它必须返回真结果,而对于字符串“hi world”,它必须返回假结果。
以下正则表达式无法按预期工作,它给出了True。
bool(re.compile('([a-z\s]{3,})+$').match("hi world")))
【问题讨论】:
-
^([a-z]{3,}\s?)+$ -
您可以使用
re.match(r'\s*[a-z]{3,}(?:\s+[a-z]{3,})*\s*$', s) -
你不需要正则表达式 - 用空格分割你的句子并检查所有单词是否至少有 3 个字符长:
if all(len(word)>2 for word in sentence.split())... 当然,你会有一个如果您必须考虑标点符号,连字符等,则更困难的情况,但即使是正则表达式也不会在没有后处理的情况下完美地做到这一点。 -
@zwer 感谢您的评论。好吧......我可以在没有正则表达式的情况下做到这一点,但我最感兴趣的是正则表达式解决此类问题的功能。