.NET Regular Expression用于查找文本中的实际单词

时间:2010-04-19 19:52:35

标签: .net regex

我正在使用VB .NET编写一个程序,该程序将从提供的文本文件中获取单词并计算每个单词出现的次数。我正在使用这个正则表达式: -

parser As New Regex("\w+")

它给了我几乎100%正确的单词。除非我有像

这样的词
  

“Ms Word App文件名是word.exe。”或者“这是一个c#语句If(a> b?1,0)?”

在这种情况下,我得到了[word& exe] AND [If,a,b,1和0]作为单独的单词。我收到word.exe和(If(a> b?1,0)作为单词会很好(为了我的目的)。

我猜\ w +寻找空格,句子终止标点符号和其他标点符号来确定一个单词。

如果标点符号不是单词的结尾,我想要一个类似的正则表达式,它不会用标点符号来破坏单词。我认为词尾可以由尾随的WhiteSpace定义,Sentence终止标点符号(你可能会想到其他人)。如果你可以建议一些正则表达式9 for VB .NET),这将是很好的帮助。

感谢。

4 个答案:

答案 0 :(得分:0)

如果我们假设那样。在它完全停止之后有一个空格然后这个正则表达式应该工作

[\w(?!\S)\.]+

答案 1 :(得分:0)

不是正则表达式,但您可以执行以下操作:

Dim words() As String = myString.Replace(". ", " ").Split(" "c)

(从内存中编写的代码可能不会完全像那样编译)

编辑:意识到代码可以简化。

答案 2 :(得分:0)

此表达式基于Expresso的默认示例文本具有相当不错(尽管不完美)的结果:

((?:\w+[.\-!?#'])*\w+)(?=\s)

答案 3 :(得分:0)

我试图在COMMENT部分发布我的代码,但它太长了。我回答我自己的问题,ANSWER真的来自Hun1Ahpu&艾伦摩尔。

我正在粘贴我的代码,告诉我如何从单词中删除拖尾标点符号。

Private mstrPunctuations As String = ",.'""`!@#$%^&*()_-+=?"
Dim parser As New Regex("\S+")
        Me.mintWordCount = parser.Matches(CleanedSource).Count
        For Each Word As Match In parser.Matches(CleanedSource)
            Dim NeedChange As Boolean = False
            For Each aChar As Char In Me.mstrPunctuations.ToCharArray()
                If Word.Value.EndsWith(aChar) Then
                    NeedChange = True
                    Exit For
                End If
            Next
            If NeedChange Then
                SetStringStat(Word.Value.Substring(0, Word.Value.Length - 1))
            Else
                SetStringStat(Word.Value)
            End If
        Next