正则表达式根据单词长度过滤句子

时间:2012-01-11 09:28:13

标签: regex

我正在试图找出一个正则表达式来匹配每个单词的长度小于某个值的字符串。

,如果值为6,则正则表达式应匹配:"this is a test string"而不是"this is another test string",因为“另一个”的长度大于6。

5 个答案:

答案 0 :(得分:4)

怎么样:

^(?:\b\S{1,5}\b\s*)+$

<强>解释

^           : start of string
(?:         : start of non capture group
  \b        : word boundary
  \S{1,5}   : one to five non space char
  \b        : word boundary
  \s*       : 0 or more spaces
)+          : end of group one or more times
$           : end of string

答案 1 :(得分:1)

^\w{1,5}(\s+\w{1,5})*$

这应该匹配一个或多个长度最多为5的单词的字符串

至少在允许{n,m}语法的语言中,如Java或Perl

答案 2 :(得分:0)

您正在寻找的正则表达式的确切语法取决于您使用的语言,但这很有可能。以下示例在Python中:

import re

def matchStringLength(value, string):
  pattern = re.compile('([A-z]{1,%s} )+' % value)
  return pattern.match(string) != None

这应该足以让你开发一个完全符合你要求的方法,对于带有数字,特殊字符等的字符串,上面的代码会失败。

答案 3 :(得分:0)

[^ \ s] {5,}应该做的伎俩!它会计算除空格之外的任何其他字符,因此除非将它们添加到方括号中,否则将包含逗号等。

答案 4 :(得分:0)

一种可能性是使用否定前瞻

^(?!.*\b\w{7,}\b).+$

查看并测试here on Regexr

这里的方法与众不同,基本上我接受^.+$部分的所有内容(因+而至少有一个字符,如果您愿意,请将其更改为*也接受空字符串。)

然后我在表达式(?!.*\b\w{7,}\b)中添加一个断言。这与字符不匹配,但会检查断言是否为真。这意味着,在整个字符串中,没有连续7个或更多单词字符的部分。

(?!...) negative lookahead assertion

\w一个单词字符取决于您的语言,至少是a-zA-Z和_。在某些语言中,\w中还包含所有字母或数字的Unicode字符。请参阅此处查看character classes on regular-expression.info

\bword boundary,即从单词字符到非单词字符的变化或反之亦然。