如何检测字符串是否包含数字形式的数字或 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"
我希望能够检测一个字符串是否包含数字,可以是数字 (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"