我正在解析文本,如果遇到时间,我想拆分字符串。这是一个例子:
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.
答案 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]);