使用正则表达式限制单词数

时间:2009-07-30 22:36:06

标签: c# regex

您提供的正则表达式:^(?:\b\w+\b[\s\r\n]*){1,250}$ 如果它没有任何特殊字符,则限制多行250个单词。

如果我需要搜索包含特殊字符的单词数,我该怎么办?像这样的例子:

--> Hi! i need help with regular expression, please help me. <--

4 个答案:

答案 0 :(得分:3)

最简单的方法是对单词字符进行分组,并将这些组限制在特定范围内(1-250):

^\W*(\w+(\W+|$)){1,250}$

答案 1 :(得分:3)

我不熟悉C#所以我将描述正则表达式。

方法1:

你基本上是在寻找这个:

(\b[^\s]+\b){1,250}

在java中:

\s是任何空格字符。

[^\s]+是一系列非空白字符。

\b是一个单词边界。

您可以将正则表达式转换为C#。

方法2:

将输入文本标记为以空格分隔的单词。在java中,这可以通过以下方式完成:

String[] tokens = inputString.split("\\s+");

正则表达式为\s+

现在你可以计算数组的长度并实现你的逻辑来拒绝超过250的单词。

方法3:

定义一个模式以将空白捕获为“捕获组”。

(\s+)

现在,您可以使用while循环计算模式匹配器中的匹配数。这与方法2基本相同,但不涉及创建标记数组。

答案 2 :(得分:1)

回答有点迟,但这里没有一个解决方案有效:

^([A-ZA-Z0-9] + [^ A-ZA-Z0-9] *){1,8} $

其中{1,8}定义了你想要的字数

答案 3 :(得分:0)

您可以在任何表达式上使用{a,b}量词,如下所示:

.{1,256}
[\d\w_?]{1,567}
(0x)?[0-9A-F]{1,}

因此,在您的情况下,您可以使用:

^(?:\b\w+\b[_!?\s\r\n]*){1,250}$

_!?可以是任何特殊字符。