如何使用C#显示在字符串中找到的单词?

时间:2018-03-16 02:43:12

标签: c# regex

虽然我可以使用正则表达式替换单词,但这是我的代码:

public static string replacestring(string input)
{
   var Words = "memory|buffer overflow|address space|stack overflow|call stack";
   string cleanword = Regex.Replace(input, @"" + Words + "", "", RegexOptions.IgnoreCase);
   return cleanword;
}

这是字符串值:

  

在软件中,如果调用堆栈指针超出堆栈限制,则会发生堆栈溢出。调用堆栈可以包括有限数量的地址空间,通常在程序开始时确定。调用堆栈的大小取决于许多因素,包括编程语言,机器架构,多线程和可用内存量。当程序试图使用比调用堆栈上可用空间更多的空间时(也就是说,当它试图访问超出调用堆栈边界的内存时,这本质上是一个缓冲区溢出),堆栈被称为溢出,通常导致程序崩溃。

如何选择并显示字符串中的单词并计算它们?

例如

  

发现:堆栈溢出,地址空间,调用堆栈,内存,缓冲区溢出
  计数:5

百万感谢提前表示非常感谢,并对造成的任何不便表示歉意。

4 个答案:

答案 0 :(得分:3)

你可以从这样的事情开始:

<Picker x:Name="picker" 
     Title="Select new status"
     TextColor="Black"
     HorizontalOptions="Start"
     ItemsSource="{Binding StatusList}"
     ItemDisplayBinding="{Binding E_Name}"
     SelectedItem="{Binding SelectedStatus}"/>

<Label Text="{Binding SelectedStatus.E_Id}" IsVisible="False" x:Name="E_Id"/>

输出:

  

发现:内存,缓冲区溢出,地址空间,堆栈溢出,调用堆栈

     

数:5

http://rextester.com/CYRL45262

答案 1 :(得分:1)

您可以使用LINQ删除重复项并返回数组的计数。

var count = Regex.Matches(str, pattern).OfType<Match>().Select(m => m.Groups[0].Value).Distinct().ToArray().Count();

输出:

5

Code demo

答案 2 :(得分:0)

你可以像这样使用字符串的split函数:

var result = Words.split(new char[] {'|', ' '}) ;
var wordCount = result.Length;

答案 3 :(得分:0)

这是使用linq作为替代方案的解决方案: 这也解决了OP中隐含的唯一性。

var toMatch = "memory|buffer overflow|address space|stack overflow|call stack";
Regex reg = new Regex(toMatch, RegexOptions.IgnoreCase);
var result = reg.Matches(input)
                .OfType<Match>()
                .Where  (m => m.Success)
                .GroupBy(m => m.Value)
                .Select (m => new { Word = m.First().Value, QtyFound = m.Count() });

var wordsFound = string.Join(",", result.Select(r => r.Word));
var totalFound = result.Sum(r => r.QtyFound);