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

Regex 正则表达式根据单词长度过滤句子,regex,Regex,我试图找出一个正则表达式来匹配每个单词长度小于某个值的字符串 例如,如果值为6,则正则表达式应匹配:“这是一个测试字符串”,而不是“这是另一个测试字符串”,因为“另一个”的长度大于6 ^\w{1,5}(\s+\w{1,5})*$ 这应该匹配长度不超过5的一个或多个单词的字符串 至少在允许使用{n,m}语法的语言中,如Java或Perl 这应该匹配长度不超过5的一个或多个单词的字符串 至少在允许使用{n,m}语法的语言中,如Java或Perl,您要查找的正则表达式的确切语法取决于您使用的语言,但

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

例如,如果值为
6
,则正则表达式应匹配:
“这是一个测试字符串”
,而不是
“这是另一个测试字符串”
,因为“另一个”的长度大于6

^\w{1,5}(\s+\w{1,5})*$
这应该匹配长度不超过5的一个或多个单词的字符串

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

这应该匹配长度不超过5的一个或多个单词的字符串


至少在允许使用{n,m}语法的语言中,如Java或Perl,您要查找的正则表达式的确切语法取决于您使用的语言,但是这是非常可能的。以下是Python中的示例:

import re

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

这应该足以让您开发一种完全满足您需求的方法,对于带有数字、特殊字符等的字符串,上述操作将失败。

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

import re

def matchStringLength(value, string):
  pattern = re.compile('([A-z]{1,%s} )+' % value)
  return pattern.match(string) != None
这应该足以让您开发一种完全满足您的要求的方法,对于带有数字、特殊字符等的字符串,上述方法将失败。

如何:

^(?:\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
那么:

^(?:\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

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

[^\s]{5,}
应该可以做到这一点!但是,它将计算除空格以外的任何其他字符,因此除非您将逗号等添加到方括号中,否则将包括在内。

一种可能性是使用负前瞻

^(?!.*\b\w{7,}\b).+$
查看并测试它

这里的方法是不同的,基本上我接受带有
^.+$
部分的所有内容(由于
+
的原因,至少有一个字符,如果您还想接受空字符串,请将其更改为
*

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

(?!…)

\w
一个单词字符,取决于您的语言,至少是a-zA-Z和Z。在某些语言中,字母或数字的所有Unicode字符都包含在
\w
中。请看这里


\b
是a,即从单词字符更改为非单词字符或相反

一种可能性是使用负面前瞻

^(?!.*\b\w{7,}\b).+$
查看并测试它

这里的方法是不同的,基本上我接受带有
^.+$
部分的所有内容(由于
+
的原因,至少有一个字符,如果您还想接受空字符串,请将其更改为
*

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

(?!…)

\w
一个单词字符,取决于您的语言,至少是a-zA-Z和Z。在某些语言中,字母或数字的所有Unicode字符都包含在
\w
中。请看这里


\b
是a,即从单词字符更改为非单词字符或相反

你应该锚定这个起点和终点。你应该锚定这个起点和终点。