【问题标题】:Remove string strats from a word until char删除字符串从一个单词开始直到 char
【发布时间】:2017-12-12 07:41:08
【问题描述】:

我有以下字符串:

customer.Id as CustomerID, case when customer.Name...

我想从我的字符串中删除as CustomerID,即所有以as开头并以,结尾的句子。我怎样才能做到这一点。我和 Linq 一起去了,但不幸的是 take 似乎不起作用:

select(c => c.TakeWhile(ch => ch!= 'As').SkipWhile(c=>c != ','))

正如您在TakeWhile 中看到的,我可以使用字符而不是单词。如何使用 SubStringLinq 或 Regex 做到这一点?

【问题讨论】:

    标签: c# regex string linq


    【解决方案1】:

    你可以使用

    var s = "customer.Id as CustomerID, case when customer.Name...";
    var res = Regex.Replace(s, @"\s+as\s+[^,]+","");
    Console.WriteLine(res);
    // => customer.Id, case when customer.Name...
    

    C# demo

    正则表达式 (see demo) 是

    \s+as\s+[^,]+
    

    匹配:

    • \s+ - 1+ 个空格
    • as - 一句话as
    • \s+ - 1+ 个空格
    • [^,]+ - 除了, 之外的 1+ 个字符

    【讨论】:

    • @JeanA Regex.Replace 在字符串中查找模式匹配的所有非重叠出现,并将它们替换为空字符串。如果您只需要替换一次,您可以使用Regex 类的对象实例并将1 作为附加参数传递以仅执行一次替换。至于正则表达式,here is another demo.
    • @WiktorStribiżew 它会解析customer.Id as [Customer ID]吗?别名可以放在方括号中并包含空格。
    • @JohnyL 见this regex demo。您可以尝试使用任何其他表达式。如果您有其他问题,请告知。
    • @WiktorStribiżew 我创建了不太复杂的模式(见下文)。
    • @JeanL 同样复杂,yours 需要 65 步,而 mine 只需 35 步即可找到匹配项。使用带有正向前瞻的惰性点是性能杀手。
    【解决方案2】:

    尽管这个实现远非完美或最简洁,但它至少可以作为一个示例,在不使用 Regex 的情况下如何做到这一点,而是使用一些带有一点 Linq 的标准 String API。

    var queryText = "customer.Id as CustomerID, case when customer.Name...";
    var columns = queryText.Split(',');
    var columnsWithoutAliases = 
        from c in columns
        let indexOfAs = c.LastIndexOf(" as ")
        select indexOfAs < 0 ? c : c.Substring(0, indexOfAs);
    var queryTextWithAliases = string.Join(",", columnsWithoutAliases);
    

    【讨论】:

      【解决方案3】:
      string sql = "customer.Id as CustomerID, case when customer.Name...";
      string sql2 = Regex.Replace(sql, @"\Was.+?(?=,)", "");
      

      【讨论】:

        猜你喜欢
        • 2017-07-17
        • 2016-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多