/ / पाठ में "x" के सटीक शब्द के उदाहरणों की संख्या ज्ञात करना - c #, regex, string

टेक्स्ट में "एक्स" के सटीक शब्द के उदाहरणों की संख्या ढूँढना - सी #, रेगेक्स, स्ट्रिंग

मैं "x" के सटीक शब्द के उदाहरणों की संख्या का पता लगाने के लिए "मी वर्किंग सी # हूं। उदाहरण के लिए:

List<string> words = new List<string> {"Mode", "Model", "Model:"};
Text= "This is Model: x Type: y aa: e";

मैंने रेगेक्स का उपयोग किया है:

for(i=0; i<words.count; i++)
{
word= list[i]
int count= Regex.Matches(Text,word)
}

लेकिन इसका काम नहीं हो रहा है। उपरोक्त कोड का परिणाम दिया count=1 हर एक के लिए Mode, Model, तथा Model:। मैं अपनी गिनती होना चाहता हूं 0 के लिये Mode, 0 के लिये Model, परंतु 1 के लिये Model: यह सटीक शब्द के उदाहरण की संख्या पाता है।

भूल गए कि मैं अपने मामले में विभाजन का उपयोग नहीं कर सकता हूं। क्या कोई ऐसा तरीका है जिसका मैं उपयोग नहीं कर सकता हूं split?

उत्तर:

उत्तर № 1 के लिए 4

मैं इस उद्देश्य के लिए LINQ का उपयोग करता हूं:

List<string> words = new List<string> { "Mode", "Model", "Model:" };
Text = "This is Model: x Type: Model: y aa: Mode e Model:";
var textArray = Text.Split(" ");
var countt = words.Select(item => textArray.ToList().Contains(item) ?
textArray.Count(d => d == item) : 0).ToArray();

परिणाम:

मोड के लिए => गिनती = 1

मॉडल के लिए => गिनती = 0

मॉडल के लिए: => गिनती = 3

संपादित करें: मैं इस उद्देश्य के लिए LINQ का उपयोग करना पसंद करता हूं क्योंकि जैसा कि आप देखते हैं कि यह इस परिदृश्य में अधिक आसान और क्लीनर है, लेकिन यदि आप एक रेगेक्स समाधान की तलाश कर रहे हैं, तो आप यह कोशिश कर सकते हैं:

List<int> count = new List<int>();
foreach (var word in words)
{
var regex = new Regex(string.Format(@"b{0}(s|$)", word), RegexOptions.IgnoreCase);
count.Add(regex.Matches(Text).Count);
}

EDIT2: या LINQ और Regex और बिना संयोजन के Split आप ऐसा कर सकते हैं:

List<int> count = words.Select(word => new Regex(string.Format(@"b{0}(s|$)", word), RegexOptions.IgnoreCase))
.Select(regex => regex.Matches(Text).Count).ToList();

जवाब के लिए 3 № 2

हालांकि @ S.Akhbari का समाधान काम करता है ... मुझे लगता है कि Linq का उपयोग क्लीनर है:

var splitted = Text.Split(" ");
var items = words.Select(x => new { Word = x, Count = splitted.Count(y => y == x) });

से प्रत्येक item होगा Word तथा Count गुण।

इसे यहां कार्रवाई में देखें


जवाब के लिए 0 № 3

b शब्द सीमाओं पर मिलान।

 for(i=0; i<words.count; i++)
{
word= list[i]
var regex = new Regex(string.Format(@"b{0}b", word),
RegexOptions.IgnoreCase);
int count= regex.Matches(Text).Count;
}