我想在下面的单词列表中找到“Amount”这个词:
WaterAmount
DamageAmount
AmountOwed
我尝试使用正则表达式,但以下内容不起作用:
Regex.IsMatch(name, @"\Amount\")
有人可以帮我弄明白怎么做吗?
谢谢。
更新
正在使用的代码:
foreach (string name in Request.Form.AllKeys)
{
if (Regex.IsMatch(name, "Amount"))
{
Response.Write(Request.Form[name]);
}
else
{
Response.Write("Not working\n");
}
}
}
答案 0 :(得分:3)
使用:
而不是使用正则表达式name.Contains("Amount")
这应该返回一个关于Amount是否在字符串中的布尔值。
在这种情况下你不需要正则表达式(有时候在没必要的情况下去除它是好的)
正如其他人所说,
name.IndexOf("amount", StringComparison.OrdinalIgnoreCase) >= 0;
也可用于包括“AMOUNT”,“金额”,“AmOunT”等。
或者:
name.IndexOf("amount", StringComparison.OrdinalIgnoreCase)!= -1
我们只是检查IndexOf是否为'not found'发送回-1。
您可能不想使用的原因:
name.ToLower().Contains("amount")
是因为它会出现国际字符(重音等)的问题。 如果您传入的变量可能包含任何文本,则可能会出现问题。 对于具有常量字符串的情况,它可能没问题(但不是非常推荐)
编辑:
如果我正确理解C#(不是我的专业知识,虽然我已经使用过它),这应该可行:
foreach (string name in Request.Form.AllKeys)
{
if (name.IndexOf("amount", StringComparison.OrdinalIgnoreCase) >= 0)
{
Response.Write(Request.Form[name]);
}
else
{
Response.Write("Not working\n");
}
}
我在你的代码中看到了一个额外的大括号。这应该在那里吗?
答案 1 :(得分:1)
我认为你的方法是正确的。我会建议一个小改动让它起作用......
Regex.IsMatch(name, @"Amount")
祝你好运!
答案 2 :(得分:0)
var index = name.IndexOf("Amount", 0, name.Length);
这将在第一次出现时为index of。如果你想要所有这些,只需循环文本。
忽略区分大小写;
var index = name.IndexOf("Amount", 0, StringComparison.OrdinalIgnoreCase);
如果没有匹配,IndexOf
将返回-1。
如果您只想知道字符串是否在那里,请使用.Contains()
。