2013-05-14 54 views
0

在我的窗口应用程序中,我想从句子中找到确切的单词。两个字段分别是文本框(word)和richtextbox(句子)。我已经使用Str(i).contains(单词)和For Each Match as Match In Regex.Matches(str(i),word)。如何从句子中找到确切词

但是这两个没有得到确切的word.For例如, 字:吃 一句:parfaite换货AUX exigences CRE * 在吃 *évolutivesduMarché广场d aujourd辉

它上面的取在create.ed吃,但我需要集中onle不吃与结合。

+1

在你的**单词前后添加空格**,不是? – 2013-05-14 05:54:21

+0

如何'使用'indexOf'。当它找到第一个匹配项时,请使用start index =第一个出现索引加上搜索字符串长度再次开始搜索。直到'indexOf'返回-1 – 2013-05-14 05:59:12

+0

谢谢阿德里安..在某些情况下,添加空间将无法提取,如单词是声明的结尾。可以为第二个添加样本吗? – Jai 2013-05-14 06:01:43

回答

4

在您的Regex.Matches中,您需要使用\ b字边界字符。我只是写在C#示例代码,现在我注意到,你的问题是VB.NET,所以我会添加这两个代码示例:

C#:

 //Example 1: 
     var testString = "parfaite ment aux exigences create évolutives du marché d aujourd hui"; 
     var pattern = "ate"; 
     MatchCollection found = Regex.Matches(testString, @"\b" + pattern + @"\b"); 

     if (found.Count > 0) 
     { 
      foreach (Match f in found) 
      { 
       Console.WriteLine("'{0}' found at position {1} in given testString.", f.Value, f.Index); 
      } 
     } 
     else Console.WriteLine("No matches in given testString."); 


     //Example 2: 
     var testString1 = "parfaite ment aux exigences cre*ate* évolutives du marché d aujourd hui I don't know the language but this: ate and the last one should be found: ate!"; 
     var pattern1 = "ate"; 
     MatchCollection found1 = Regex.Matches(testString1, @"\b" + pattern1 + @"\b"); 

     if (found1.Count > 0) 
     { 
      foreach (Match f in found1) 
      { 
       Console.WriteLine("'{0}' found at position {1} in given testString1.", f.Value, f.Index); 
      } 
     } 
     else Console.WriteLine("No matches in given testString1."); 

     Console.ReadLine(); 

VB.NET :

'Example 1: 
    Dim testString = "parfaite ment aux exigences create évolutives du marché d aujourd hui" 
    Dim pattern = "ate" 
    Dim found As MatchCollection = Regex.Matches(testString, "\b" & pattern & "\b") 

    If found.Count > 0 Then 
     For Each f In found 
      Console.WriteLine("'{0}' found at position {1} in given testString.", f.Value, f.Index) 
     Next 
    Else 
     Console.WriteLine("No matches in given testString.") 
    End If 

    'Example 2: 
    Dim testString1 = "parfaite ment aux exigences cre*ate* évolutives du marché d aujourd hui I don't know the language but this: ate and the last one should be found: ate!" 
    Dim pattern1 = "ate" 
    Dim found1 As MatchCollection = Regex.Matches(testString1, "\b" & pattern1 & "\b") 

    If (found1.Count > 0) Then 

     For Each f As Match In found1 
      Console.WriteLine("'{0}' found at position {1} in given testString1.", f.Value, f.Index) 
     Next 
    Else 
     Console.WriteLine("No matches in given testString1.") 
    End If 

    Console.ReadLine() 
0

也许这可能有帮助吗?

Private Sub SearchForWord() 
    Dim SearchString() As String = Split("ate parfaite ment aux exigences cre*ate* évolutives du marché d aujourd hui", " ") 
    Dim WordToFind As String = "ate" 
    Dim count As Integer = 0 
    Dim NumMatches As Integer = 0 

    Do Until count = UBound(SearchString) 
     If UCase$(WordToFind) = UCase$(SearchString(count)) Then 
      NumMatches = NumMatches + 1 
     End If 
     count = count + 1 
    Loop 

    Debug.Print(Format(NumMatches)) 

End Sub