如何检测字符串是否包含数字形式的数字或 C# 中的字母形式?

How do I detect if a string contains either a number as a digit or written as letters in C#?

我希望能够检测一个字符串是否包含数字,可以是数字 (0-9) 还是简单英语的字母(一、二、三..)。字符串中的字母数字应被检测为单个单词,而不是单词的一部分。

例如:

"This string contains no numbers" = false;
"This string contains the number 1" = true;
"This string contains the number three" = true;
"This string contains a dogs bone" = false; //contains the word 'one' as part of the word 'bone', therefore returns false

在 SO 上找不到任何专门回答这个问题的内容;它们主要与从字符串中提取整数有关,所以我想我会继续问。

有没有可以处理这类事情的图书馆?如果没有,我该如何处理?有没有比将所有文字数字放入数组更快的方法?

创建一个数组,其中包含您要在该字符串中查找的所有内容并对其进行迭代。

如果您只关心单个数字,它是禁食的解决方案。如果你想用各种数字来做,这将需要更多的工作.....

如果您的意思是使用内置库,那么我不知道有没有,如果有人知道得更多,我会很乐意更正。

编辑:更新了 OP 说明和 的建议

要对单独的词执行此操作,您可以改用此方法:

public bool ContainsNumber(string s)
{
    // This is the 'filter' of things you want to check for
    // The '...' is for brevity, obviously it should have the other numbers here
    var numbers = new List<string>() { "1", "2", "3", ... , "one", "two", "three" };

    // Split the provided string into words
    var words = s.Split(' ').ToList();

    // Checks if the list of words matches ANY of the provided numbers
    // Case and culture insensitive for better matching
    return words.Any(w => numbers.Any(n => n.Equals(w, StringComparison.OrdinalIgnoreCase)));
}

用法:

ContainsNumber("No numbers here");
ContainsNumber("The number three");
ContainsNumber("The dog ate a bone");

输出:

false
true
false

编辑 2:return 匹配词

public List<string> GetMatches(string s)
{
    var numbers = new List<string>() { "1", "2", "3", ... , "one", "two", "three" };
    var words = s.Split(' ').ToList();

    return words.Intersect(numbers, StringComparer.OrdinalIgnoreCase).ToList();
}

用法:

GetMatches("this has no numbers");
GetMatches("this has one number");
GetMatches("this 1 has a bone");
GetMatches("1 two 3 and then some more");

输出:

null
"one"
"1"
"1", "two", "3"