c# - 需要从c#中的字符串中提取列名
问题描述
我正在尝试从 SQL 计算字符串中提取所有列名。数据保存在数据表的单元格中,由列周围的方括号确定。我可以提取 [*] 的每个实例,但刚刚注意到我有一个问题。一些列有表名,一些列有模式和表名。例如 [column] [table].column] 或 [schema].[table].[column] 如何修改此代码以提取第一个“[”和最后一个“]”之间不带句点的所有内容?
以下代码填充 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()
细节
\[
- 文字[
.*?
- 除换行符以外的任何 0+ 个字符,尽可能少
](?!\.)
- 一个]
char 不紧跟一个.
.
推荐阅读
- android - 无法在 android studio 中创建虚拟设备,错误:HAXM 安装失败
- firebase - 使用 Flutter,如何自动显示已在 firebase 中更新的电子邮件?
- python - 基于 Tkinter 中的时间列表创建自动倒计时
- android - 实施 Mesibo Android SDK 时出错
- regex - Powershell根据前缀向文件名添加后缀时出错
- html - 在表格数据中添加不同颜色的圆圈
- sgx - 如何检查 sgx enclave 中应用程序的内存使用情况
- api - 谁能推荐一个 IPTV 服务提供商 api 来与我的移动应用程序(最好是 Ionic 应用程序)集成
- scala - 为什么我需要使用函数签名扩展我的案例类才能在 Sparks rdd.mapPartition 中工作?
- python - pymongo 在大型集合上更新相同的字段值