我想了解如何分析C#语句的语法。 在我的情况下,我有一个句子,每个句子必须遵循。 的语法如下:检查字符串的语法 - C#
A 'B' 是 'C'。
每个句子必须包含5个单词。我的第一句话必须是'A',第三个'是'和第四个'a'。
现在我想检查一个测试句,如果它符合我的语法。
测试一句话:
狗是没有猫。
在这个例子中,测试句话是错误的,因为第四个词是“不”,而不是“一”是什么,应该对语法basend。
我读了关于LINQ的地方,我可以查询包含指定词汇的句子。
的代码会是这个样子:
//Notice the third sentence would have the correct syntax
string text = "A Dog is no Cat. My Dog is a Cat. A Dog is a Cat.";
//Splitting text into single sentences
string[] sentences = text.Split(new char[] { '.'});
//Defining the search terms
string[] wordToMatch ={"A", "is"};
//Find sentences that contain all terms I'm looking for
var sentenceQuery = from sentence in sentences
let w = sentence.Split(new Char[] {'.'})
where w.Distinct().Intersect(wordsToMatch).Count == wordsToMatch.Count()
select sentence;
有了这个代码,我可以检查是否句子包含我的条件我要找的,但问题是它不检查的话中的位置这句话。 有没有一种方法可以检查位置,或者更好的方法来检查C#语句的语法?
“相交”不会说任何有关单词在列表中的位置,所以不会做这项工作。你想要做的是分割输入字符串并编写一个匹配模式的方法 - 或者通过硬编码if(words [0]!=“A”)return false;'等等,或者通过给它一个规则集 - 可能是一个对象列表,例如'{int Index; string RequiredWord; }'。你的第一句话令人震惊,但你的实际要求是相当温和和合理的。更新如果我有更多的理解,我会直接去德米特里的正则表达式的想法。你的代码也可以构建正则表达式字符串(然后你有3个问题) –
“Dog42是Cat17”是一个有效的语法吗? –
@AleksAndreev在这种情况下是的。我没有试图检查这句话是否有意义。试图找出句子是否包含我指定的语法 –