2

我正在尝试获取字符串中的所有单词,至少 4 个字符长且少于 10 个字符。当我使用以下正则表达式时,它只是将整个字符串作为一个单词返回。你能看看下面的例子,告诉我应该怎么写这个正则表达式吗?

string result = "Overfishing, erosion and warmer waters are feeding jellyfish blooms in coastal regions worldwide. And they're causing damage"
string[] words = Regex.Split(result, @"[\W]{4,10}");

foreach (string line in words)
{
    Console.WriteLine(line);
}
4

2 回答 2

4

您的代码不起作用,因为该模式将仅匹配 4 到 10 个连续非单词字符的序列,这些字符不会出现在字符串中。所以Regex.Split只返回一个包含原始字符串的数组。

尝试使用这种模式:

\b\w{4,10}\b

例如:

string[] words = Regex.Matches(result, @"\b\w{4,10}\b")
                      .Cast<Match>()
                      .Select(m => m.Value)
                      .ToArray();

这将匹配由单词边界包围的 4 到 10 个连续单词字符的任何序列。

于 2013-11-14T07:19:53.610 回答
2

没有正则表达式,您可以使用String.Split类似的方法;

string result = "Overfishing, erosion and warmer waters are feeding jellyfish blooms in coastal regions worldwide. And they're causing damage";
var array = result.Split(new string[] {",", ".", " "}, StringSplitOptions.RemoveEmptyEntries);
foreach (var item in array)
{
   if(item.Length >= 4 && item.Length < 10)
      Console.WriteLine(item);
}

输出将是;

erosion
warmer
waters
feeding
jellyfish
blooms
coastal
regions
worldwide
they're
causing
damage

这里一个demonstration.

于 2013-11-14T07:23:03.193 回答