0

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

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

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

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

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

4

4 回答 4

8
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;
于 2013-05-30T19:46:59.693 回答
6
 var result = "(11)123456(14)abc123(18)gt567"
            .Split(new string[]{"("}, StringSplitOptions.RemoveEmptyEntries)
            .Select(i => "(" + i).ToList();
于 2013-05-30T19:46:51.870 回答
1

就像是:

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();
于 2013-05-30T19:44:48.070 回答
0

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

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

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

如果您需要处理诸如换行之类的空白,您可能需要稍微调整模式或 RegexOptions

于 2015-12-09T22:42:18.940 回答