为什么拆分会消除此c#代码中的部分字符串?

时间:2013-02-22 05:40:23

标签: c# regex split

我正在解析文本,如果遇到时间,我想拆分字符串。这是一个例子:

At 12:30AM I got up. At 11:30PM I went to bed.

我的代码:

string time = @"[0-9]{2}:[0-9]{2}(A|P)M";
string test = "At 12:30AM I got up. At 11:30PM I went to bed.";
string[] result = Regex.Split(test, time);

foreach(string element in result)
{
   Console.WriteLine(element);
}

我需要得到的东西:

At 12:30AM
I got up. At 11:30PM
I went to bed.

我得到了什么:

At
 A
  I got up. At
 P
  I went to bed.

剩下的时间都是A或P.

3 个答案:

答案 0 :(得分:1)

因为分割功能分隔符未包含在结果中 如果您希望将其保留为拆分元素,请将其括在括号中

string time = @"([0-9]{2}:[0-9]{2}(A|P)M)";

顺便说一下,这就是'A'和'P'被留下的原因,因为它们被括在括号中。

答案 1 :(得分:1)

将正则表达式更改为

([0-9]{2}:[0-9]{2}[AP]M)

围绕(A | P)的括号将其定义为捕获组。您需要捕获整个时间字符串。所以把括号括在整个事物上。

答案 2 :(得分:0)

使用捕获组。

string regex=@".+?(?:\b\d{2}:\d{2}(?:AM|PM)|$)";
MatchCollection matches=Regex.Matches(input,regex);
foreach(var match in matches)
    Console.WriteLine(match.Groups[0]);