C# 检查字符串是否仅包含某个单词?

C# 检查字符串是否仅包含某个单词?,c#,string,C#,String,我试图找到一种方法来检查字符串是否只包含某个单词,或者某个单词和日期。假设字符串可以有多个单词(如短句)和一个或多个日期(用连字符分隔)。 例如,如果某个单词是“On”或“On”,那么 在这种情况下,您必须使用语法分析器来告诉您单词在句子中的角色。所以,如果是介词,我们认为是错误的,等等。 是一个实现了英语语法分析器的库。如果我正确理解了您的问题,您希望检查字符串是否包含“On”或“On”,但您会将其降低,使其仅为“On” 您可以将字符串拆分为空格,然后检查是否匹配“开”。 这里只是一个简单的例

我试图找到一种方法来检查字符串是否只包含某个单词,或者某个单词和日期。假设字符串可以有多个单词(如短句)和一个或多个日期(用连字符分隔)。 例如,如果某个单词是“On”或“On”,那么


在这种情况下,您必须使用语法分析器来告诉您单词在句子中的角色。所以,如果是介词,我们认为是错误的,等等。
是一个实现了英语语法分析器的库。

如果我正确理解了您的问题,您希望检查字符串是否包含“On”或“On”,但您会将其降低,使其仅为“On”

您可以将字符串拆分为空格,然后检查是否匹配“开”。 这里只是一个简单的例子。你可以用更好的方式来做,但这只是一个PoC

string example = "On 4/15 abc";
string[] words = example.Split(' ');
bool match = false;
foreach(string word in words)
{
    if (word.Any(x => char.IsLetter(x))) {
        if (word.ToLower() == "on") 
        {
            match = true;
        } 
        else 
        { 
            match = false; break;
        }
    }
}

正如我在评论中所描述的:

private bool IsValidString(string str)
{
    //Lowercase the original string 
    string lower = str.ToLower();
    //split by space. 
    List<string> parts = lower.Split(' ').ToList();

    //Then check if it contains "on" 
    if (parts.Contains("on"))
    {
        // get rid of the disturbing influence of "on"
        parts.Remove("on");
        //and furthermore check if the rest contains at least on further letter. This allows for numbers to appear
        if (parts.Any(x => x.ToCharArray().Any(y=> char.IsLetter(y))))
        {
            return false;
        }
        // CHECK here for the date format
        return true; // here only "on2 exists in the string as a word
    }
    else // if no "on" then it is false anyway
    {
        return false;
    }   
}
private bool IsValidString(字符串str)
{
//将原始字符串小写
字符串下限=str.ToLower();
//按空间分割。
列表部分=较低的.Split(“”).ToList();
//然后检查它是否包含“on”
如果(部件包含(“on”))
{
//摆脱“on”的干扰影响
零件。移除(“打开”);
//并且进一步检查其余的是否包含至少更多的字母。这允许出现数字
if(parts.Any(x=>x.tocharray().Any(y=>char.IsLetter(y)))
{
返回false;
}
//检查这里的日期格式
return true;//此处字符串中只有“on2”作为单词存在
}
else//如果没有“开”,那么它无论如何都是假的
{
返回false;
}   
}
您可以使用检查字符串的其余部分是否包含任何字母


编辑:此代码将解析您给出的所有示例。在我用注释指出的点上检查您需要包含的日期格式

在s上有多个
如何?它会返回true还是false?可能
正则表达式
帮助?模式
^(O | O)n+
你实际上是用文字将整个算法写进了你的文章中。你可以用
拆分,然后看它的左边。然后勾选“一旦它包含另一个按字母顺序排列的单词,如“turn”或“abc”或其他任何东西“然后返回
false
。有帮助吗?您还有其他问题吗?@vahdet在
s上有多个
,也应该返回false。如果您能提供一个示例,我们就可以看到您目前的尝试了。此外,这感觉像一个XY问题-。你能解释一下你为什么要这么做吗?谢谢!但不幸的是,我认为这是行不通的,因为在代码中,“打开”仍然会返回true。它实际上需要返回false。好吧,这样就行了。将它放入foreach循环
if(word.Any(x=>char.isleter(x)){if(word.ToLower()=“on”){match=true;}else{match=false;break;}
谢谢你,Mong Zhu!这很有魅力。我也测试了所有示例,也测试了更多,效果都很好。我将自己添加日期格式部分!非常感谢你的帮助!@MikaJones欢迎你。linq部分也可以通过正常的for循环实现。祝你有愉快的一天
string example = "On 4/15 abc";
string[] words = example.Split(' ');
bool match = false;
foreach(string word in words)
{
    if (word.Any(x => char.IsLetter(x))) {
        if (word.ToLower() == "on") 
        {
            match = true;
        } 
        else 
        { 
            match = false; break;
        }
    }
}
private bool IsValidString(string str)
{
    //Lowercase the original string 
    string lower = str.ToLower();
    //split by space. 
    List<string> parts = lower.Split(' ').ToList();

    //Then check if it contains "on" 
    if (parts.Contains("on"))
    {
        // get rid of the disturbing influence of "on"
        parts.Remove("on");
        //and furthermore check if the rest contains at least on further letter. This allows for numbers to appear
        if (parts.Any(x => x.ToCharArray().Any(y=> char.IsLetter(y))))
        {
            return false;
        }
        // CHECK here for the date format
        return true; // here only "on2 exists in the string as a word
    }
    else // if no "on" then it is false anyway
    {
        return false;
    }   
}