我在尝试将数据表列名称与包含通配符的字符串进行匹配时遇到问题。
我有一个包含各种列名的数据表,其中包括一个名为如下的集合:" PsA"," PsB"," PsC"等。我想迭代标题中包含Ps的所有列,并使用这些标题来提取数据。
我目前有以下代码无法返回任何匹配项。我在if语句中替换了一个直接值(" PsA")作为测试,它工作正常;但是,当我使用通配符时,我没有匹配。我也试过没有运气的正则表达式。
private void dfaSection_SelectedIndexChanged(object sender, EventArgs e)
{
string psText = null;
string colID = "Ps*";
offBox.Text = ""; //Clear textbox if a reselection occurs
psBox.Text = ""; //Clear textbox if a reselection occurs
info.offTitle = dfaSection.Text; //Set textbox from variable
dt = opr.findOffByTitle(info); //Get datatable from SQL database
if(dt.Rows.Count > 0)
{
offBox.Text = dt.Rows[0][5].ToString(); //Set textbox from datatable
foreach(DataColumn dc in dt.Columns) //Loop through datatable columns
{
if (dc.ColumnName.ToString() == colID) //Check that column title matches test string - Later addition--> && dt.Rows[0][dc].ToString() != null)
{
psText = dt.Rows[0][dc].ToString() + "\n\n"; //Add data from matched column to string variable
}
}
psBox.Text = psText; //Set textbox from variable
}
}
编辑:使用.Contains(colID)
现在匹配的列名修复了问题,字符串现在没有加载到psText
变量,但是我会花一些时间来完成它并使其正常工作。谢谢Skaros Ilias。
答案 0 :(得分:0)
我对C没有那么失败,但==
肯定不是正确的方法。
您需要使用contains
方法。正如我所说,我对它并不熟悉,但docs有一个很好的例子。
String s = "This is a string.";
String sub1 = "this";
Console.WriteLine("Does '{0}' contain '{1}'?", s, sub1);
StringComparison comp = StringComparison.Ordinal;
Console.WriteLine(" {0:G}: {1}", comp, s.Contains(sub1, comp));
答案 1 :(得分:0)
根据以前的答案:Regular expression wildcard
以下是代码示例:
private static bool Match(string pattern, string stringToCheck) {
var finalPattern = pattern.Replace("*", ".*?");
Regex regex = new Regex(finalPattern);
return regex.IsMatch(stringToCheck);
}
答案 2 :(得分:0)
在断点时检查列名是什么,在失败时检查colID
。当你甚至不知道值时,你怎么解决问题?
使用dc.ColumnName.ToString().StartsWith()
。 Contains()
是好的,直到字符串结尾。