我正在使用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),这将是很好的帮助。
感谢。
答案 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