RegEx模式不匹配句子终止符

时间:2016-05-03 04:16:49

标签: c# regex

我正在尝试确定我正在处理的解析应用程序的句子结束。正则表达式并不是我的强项,可以使用一些帮助。

这是我正在使用的一个例句(单词数组):

Hi! What's up? I know I owe you $1.50. Sorry.I swear I'll give it to
you later...

我的代码在段落上运行.Split(),然后将这些单词作为数组传递进行解析。然而,正则表达式似乎没有检测到我用来确定一个句子已经结束的值("。","!"," ?&#34)。此外,我的代码中没有一些标准 - 我希望能够确定期间和金钱之间的差异。并且,优雅地处理无空间句末期。

这是一些代码。有人可以建议模式为什么不匹配?

foreach (var word in words)
{
    string pat = @"(?sx-m)[^\r\n].*?(?:(?:\.|\?|!|\:)\s)";

    Regex r = new Regex(pat, RegexOptions.IgnoreCase);
    Match m = r.Match(word);
    while (m.Success)
        sentanceNum++;
}

Per Vera的评论,这是我的最终代码块:

               int sentenceNum = 1;
            // Regex for sentence terminators
               string pat = @"(?:.*?([.?!:]))*";

            // Regex for money (not a sentance terminator)
            // Regex borrowed from online code example.
            string money =
                @"^\-?\(?\$?\s*\-?\s*\(?(((\d{1,3}((\,\d{3})*|\d*))?(\.\d{1,4})?)|((\d{1,3}((\,\d{3})*|\d*))(\.\d{0,4})?))\)?$";

            Regex d = new Regex(money, RegexOptions.IgnoreCase);
            Regex r = new Regex(pat, RegexOptions.IgnoreCase);
            Match m = d.Match(word);

            // if it isn't money, increment sentanceNum. Increment 
            // will only happen if 'pat' var matches, otherwise, increment by 0.
            if (!m.Success)
                sentanceNum = sentanceNum + r.Match(word).Groups[1].Captures.Count;

0 个答案:

没有答案