簡體   English   中英

需要從c#中的字符串中提取列名

[英]Need to extract column names from string in 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+ 個字符,盡可能少
  • ](?!\\.) - 一個]字符不緊跟一個. .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM