所以,我有我的整个字符串(约10,000个字符),然后搜索该字符串中的单词(或很多的话)。 随着regex(word).Matches(scrappedstring)
但如何做到这一点,以提取整个句子,包含了这个词汇。 我想带一个子搜索的词,直到第一个点/感叹号/问号/等之后。 但如何把句子的部分搜索词前?
或者,也许有一个更好的逻辑是什么?
所以,我有我的整个字符串(约10,000个字符),然后搜索该字符串中的单词(或很多的话)。 随着regex(word).Matches(scrappedstring)
但如何做到这一点,以提取整个句子,包含了这个词汇。 我想带一个子搜索的词,直到第一个点/感叹号/问号/等之后。 但如何把句子的部分搜索词前?
或者,也许有一个更好的逻辑是什么?
如果您的边界是如.
, !
, ?
和;
,符合所有的句子[^.!?;]*(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();
你可以得到句子的选手(点/感叹号/ qustion马克/等)之间的串并搜索一个循环中每个句子的单词。
然后,当你找到匹配词返回字符串。
一旦你的位置,你会读出,然后到下一个.
,文件或结束..但你还需要从字到的开始向后读取.
或文件的开头。 这两个职位的意思,那么你可以提取的句子。
注意,上面所列出它不是防呆......最简单的形式eg
将意味着句子后开始g.
这是不大概的情况。
提取从输入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();
}
你可以这样做,在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.
}