.NET Regular Expression, чтобы найти реальные слова в тексте - PullRequest
1 голос
/ 19 апреля 2010

Я использую VB .NET для написания программы, которая будет получать слова из поставляемого текстового файла и подсчитывать, сколько раз каждое слово появляется. Я использую это регулярное выражение: -

parser As New Regex("\w+")

Это дает мне почти 100% правильных слов. За исключением случаев, когда у меня есть такие слова, как

"Имя файла приложения MS Word - word.exe." или "это утверждение c # If (a> b? 1,0)?"

В таких случаях я получаю [word & exe] AND [If, a, b, 1 и 0] как отдельные слова. было бы неплохо (для моей цели), чтобы я получил word.exe и (если (a> b? 1,0) в качестве слов.

Я думаю, \ w + ищет пробелы, знаки препинания в конце предложения и другие знаки препинания для определения слова.

Я хочу подобное регулярное выражение, которое не будет разбивать слово знаком препинания, если знак препинания не является концом слова. Я думаю, что конец слова может быть определен конечным WhiteSpace, предложение, заканчивающее пунктуацию (вы можете думать о других). если вы можете предложить какое-нибудь регулярное выражение 9 для VB .NET), это очень поможет.

Спасибо.

Ответы [ 4 ]

0 голосов
/ 21 апреля 2010

Я пытался разместить свой код в разделе КОММЕНТАРИЙ, но это было слишком долго для этого. Я отвечаю на свой собственный вопрос ОТВЕТ, действительно пришедший из Hun1Ahpu & Alan Moore.

Я вставляю свой код того, как я избавляюсь от конечного знака препинания из слова.

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
0 голосов
/ 19 апреля 2010

Не регулярное выражение как таковое, но вы можете просто сделать что-то вроде:

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

(код, написанный из памяти, поэтому, вероятно, не будет компилироваться именно так)

Редактировать: Понял, что код может быть просто найден.

0 голосов
/ 20 апреля 2010

Это выражение имеет довольно хорошие (хотя и не идеальные) результаты на основе образца текста по умолчанию в Expresso:

((?:\w+[.\-!?#'])*\w+)(?=\s)
0 голосов
/ 19 апреля 2010

Если мы допустим это. с пробелом после полной остановки, тогда это регулярное выражение должно работать

[\w(?!\S)\.]+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...