【问题标题】:What is a good approach for splitting this string in C#?在 C# 中拆分此字符串的好方法是什么?
【发布时间】:2013-05-30 19:41:35
【问题描述】:

我需要在 C# 中拆分一个格式如下的字符串:

“(11)123456(14)abc123(18)gt567”

期望的结果是一个字符串数组,例如:

  • "(11)123456"
  • "(14)abc123"
  • “(18)gt567”

我猜可能会涉及到正则表达式,但这是我的弱项之一。

【问题讨论】:

  • 什么标准决定了字符串的分割位置?一个左括号?
  • 为什么不使用 '(' 进行拆分?
  • var parts = text.Split('(').Select(p=>"(" + p).ToArray()

标签: c# regex split


【解决方案1】:
var s = "(11)123456(14)abc123(18)gt567";

Regex r = new Regex(@"\(\d+\)\w+");

var matches = r.Matches(s);

string[] array = new string[matches.Count];
for(int i = 0; i < matches.Count; i++)
    array[i] = matches[i].Captures[0].Value;

【讨论】:

    【解决方案2】:
     var result = "(11)123456(14)abc123(18)gt567"
                .Split(new string[]{"("}, StringSplitOptions.RemoveEmptyEntries)
                .Select(i => "(" + i).ToList();
    

    【讨论】:

    • 聪明的答案,比 RegEx 替代品表现得更好。
    • 这对我很有用。 @Schlomo 的解决方案也运行良好,但由于我使用 Linq 并且此解决方案返回一个列表,它让我更快地到达那里。感谢大家的快速回复。 (我喜欢 StackOverflow)。
    • 作为旁注,我做了一点改动以消除作为列表中第一个元素返回的额外“(”,如下所示: var result = (11)123456(14)abc123( 18)gt567".Split('(').Where(i => i != "").Select(i => "(" + i).ToList();
    • @JimK 更新了我的答案,如果你想在拆分时删除空字符串,有一个重载方法。
    • @Damith 那就更好了。再次感谢。
    【解决方案3】:

    类似:

    string theString = "(11)123456(14)abc123(18)gt567";
    
    Regex reSplit = new Regex(@"\(\d+\)[^\(]+");
    var matches = reSplit.Matches(theString);
    

    这将为您提供一组 Match 对象,然后您可以检查这些对象。

    获取字符串数组:

    var splits = matches.Cast<Match>().Select(m => m.Value).ToArray();
    

    【讨论】:

    • 别忘了他在第二场和第三场比赛中有一些字母字符。
    【解决方案4】:

    您可以使用正则表达式及其Split method 来获取部件数组。

    var s = "(11)123456(14)abc123(18)gt567";
    var pattern = new Regex(@"(\([^\(]+)");
    var components = pattern.Split(s)
    

    该模式匹配左括号后跟任意数量的字符,直到下一个左括号。

    如果您需要处理换行等空白,您可能需要稍微调整or the RegexOptions 模式。

    【讨论】:

      猜你喜欢
      • 2012-05-24
      • 1970-01-01
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 2011-09-05
      相关资源
      最近更新 更多