我是C#visual studio的新手。我想询问是否可以使用contains函数来检查我的程序是否包含DataTable行中的数字/数字?
p / s:我已经尝试过正则表达式功能(参考在线讨论的一些主题)
string checkstring = "1234567890";
Regex reNum = new Regex(@"^\d+$");
bool isNumeric = reNum.Match(checkstring).Success;
for (int i = 0; i < my_datatable.Rows.Count; i++)
{
data_source = my_datatable.Rows[i][4].ToString();
if (data_source.Contains(reNum.Match))
{
my_datatable.Rows[i][4] = "Contain Number";
}
else
{
my_datatable.Rows[d][4] = "No number";
}
}
但它似乎根本不起作用,还有其他方法吗?谢谢你的回复!
答案 0 :(得分:1)
如果要检查单元格是否只包含数字,则需要在for
循环中使用正则表达式。
而不是
if (data_source.Contains(reNum.Match))
使用
if (reNum.Match(data_source))
如果data_source
仅为数字,则返回true(注意 - 仅适用于正整数 - 如果您有其他字符,如前导短划线或小数点或逗号,则需要不同的策略。)
如果你想测试是否存在任何数字(但其他字符也可以),那么你需要将你的正则表达式字符串更改为@"\d"
,如果至少有一个数字,它将返回true本。
答案 1 :(得分:1)
你试过这个:
for (int i = 0; i < my_datatable.Rows.Count; i++)
{
string data_source = my_datatable.Rows[i][4].ToString();
if (data_source.Any(x=>Char.IsDigit(x)))
{
my_datatable.Rows[i][4] = "Contain Number";
}
else
{
my_datatable.Rows[i][4] = "No number";
}
}
data_source.Any(x=>Char.IsDigit(x))
将检查data_source
是否包含至少一位数,如果是,则将单元格文本替换为"Contain Number"
,否则单元格文本将为"No number"
。如果您要更改条件以检查所有数字,请将Any
替换为All()
答案 2 :(得分:1)
如果您想检查第4栏中是否有任何整数(例如&#34; -123456 &#34;),您可以尝试结合 Linq 和正则表达式:
var hasNumbers = my_datatable
.Rows
.OfType<DataRow>()
.Where(row => row[4] != null)
.Any(row => Regex.IsMatch(row[4].ToString(), "^-?[0-9]+$"));
如果要检查第4列是否包含数字,例如&#34; BLA-bla-的 7 强> -bla&#34;:
var hasDigits = my_datatable
.Rows
.OfType<DataRow>()
.Where(row => row[4] != null)
.Any(row => row[4].ToString().Any(c => c >= '0' && c <= '9'));