我正在尝试从 SQL 计算字符串中提取所有列名称。
数据保存在数据表的单元格中,并由列周围的方括号确定。
我可以提取 [*] 的每个实例,但刚刚注意到我有一个问题。有些列具有表名称,有些列具有架构和表名称。
例如。 [列] [表].列] 或 [架构].[表].[列]
我如何修改此代码以提取第一个“[”和最后一个“]”之间不带句点的所有内容?
以下代码填充 datatable1,然后通读以查找包含列名称 ([*]) 的任何“column_calculation_formula”单元格,并将其添加到准备上传的新数据表中的行副本中。
我尝试将新行追加到数据表中,但这引起了问题。
DataTable WBC_DTable = PopulateDataTable();
DataTable WBC_DTable2 = new DTSetup.WBDataTablesSetup().WBDSColumnsSetup();
Regex regex = new Regex(@"\[(.*?)\]");
long Rows = WBC_DTable.Rows.Count;
foreach (DataRow row in WBC_DTable.Rows)
{
string InputString = row["column_calculation_formula"].ToString();
MatchCollection matches = regex.Matches(InputString);
List<string> Output = new List<string>();
foreach (Match m in matches)
{
Output.Add(m.Value);
TextBoxAppend("Before: " + m.Value);
}
List<string> distinct = Output.Distinct().ToList();
foreach (string value in distinct)
{
TextBoxAppend("After: " + value);
if (distinct.Count() > 0)
{
DataRow NewRow = WBC_DTable2.NewRow();
NewRow.ItemArray = row.ItemArray;
NewRow["column_datatype"] = "SubColumn";
NewRow["column_name"] = value;
WBC_DTable2.Rows.Add(NewRow);
}
}
DataRow NewRow2 = WBC_DTable2.NewRow();
NewRow2.ItemArray = row.ItemArray;
WBC_DTable2.Rows.Add(NewRow2);
}
相当有信心这应该只是 Regex 调用的改变,但我对 Regex 的了解不够,无法做到这一点。
任何帮助将不胜感激。
您可以使用
var res = Regex.Matches(s, @"\[.*?](?!\.)")
.Cast<Match>().
Select(x => x.Value)
.ToList()
.
Details
-
\[
- a literal [
-
.*?
- 除了换行符之外的任何 0+ 个字符,尽可能少
-
](?!\.)
- a ]
char 后面没有紧跟着 a.
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)