如何在字符串中的一个字匹配提取完整的句子?(how to extract a whole sente

2019-10-18 03:46发布

所以,我有我的整个字符串(约10,000个字符),然后搜索该字符串中的单词(或很多的话)。 随着regex(word).Matches(scrappedstring)

但如何做到这一点,以提取整个句子,包含了这个词汇。 我想带一个子搜索的词,直到第一个点/感叹号/问号/等之后。 但如何把句子的部分搜索词前?

或者,也许有一个更好的逻辑是什么?

Answer 1:

如果您的边界是如.!?; ,符合所有的句子[^.!?;]*(wordmatch)[^.!?;]*表达。 它会给里面所需wordmatch所有句子。

例:

var s = "First sentence. Second with wordmatch ? Third one; The last wordmatch, EOM!";
var r = new Regex("[^.!?;]*(wordmatch)[^.!?;]*");
var m = r.Matches(s);

var result = Enumerable.Range(0, m.Count).Select(index => m[index].Value).ToList();


Answer 2:

你可以得到句子的选手(点/感叹号/ qustion马克/等)之间的串并搜索一个循环中每个句子的单词。

然后,当你找到匹配词返回字符串。



Answer 3:

一旦你的位置,你会读出,然后到下一个. ,文件或结束..但你还需要从字到的开始向后读取. 或文件的开头。 这两个职位的意思,那么你可以提取的句子。

注意,上面所列出它不是防呆......最简单的形式eg将意味着句子后开始g. 这是不大概的情况。



Answer 4:

提取从输入sentances。 然后搜索每个森泰斯内的指定字(一个或多个)。 返回sentances其中字(一个或多个)的存在。

    public List<string> GetMatchedString(string match, string input)
    {
        var sentanceList = input.Split(new char[] { '.', '?', '!' });
        var regex = new Regex(match);
        return sentanceList.Where(sentance => regex.Matches(sentance,0).Count > 0).ToList();
    }


Answer 5:

你可以这样做,在2个步骤,使用的过程。

首先你片段的短语,然后过滤每一个都有字。

是这样的:

var input = "A large text with many sentences. Many chars in a string!. A sentence without the pattern word.";

//Step 1: fragment phrase.
var patternPhrase = @"(?<=(^|[.!?]\s*))[^ .!?][^.!?]+[.!?]";

//Step 2: filter out only the phrases containing the word.
var patternWord = @"many";

var result = Regex
    .Matches(input, patternPhrase) // step 1
    .Cast<Match>()
    .Select(s => s.Value)
    .Where(w => Regex.IsMatch(w, patternWord, RegexOptions.IgnoreCase)); // step 2

foreach (var item in result)
{
    //do something with any phrase.
}


文章来源: how to extract a whole sentence by a single word match in a string?