RegEx的日期格式

时间:2011-06-29 14:09:05

标签: c# regex

说我有这样的字符串:

07-MAY-07 Hello World 07-MAY-07 Hello Again

所以模式是DD-MMM-YY,其中MMM是一个月的三字母格式。什么正则表达式会将此字符串分解为:

07-MAY-07 Hello World
07-MAY-07 Hello Again

===================

使用下面针对C#修改的Jason代码,

string input = @"07-MAY-07 Hello World 07-MAY-07 Hello Again";   
string pattern = @"(\d{2}-[A-Z]{3}-\d{2}\s)(\D*|\s)";

string[] results = Regex.Split(input, pattern);
results.Dump();

Console.WriteLine("Length = {0}", results.Count());
foreach (string split in results) 
{
   Console.WriteLine("'{0}'", split);
   Console.WriteLine();
}

我得到嵌入的空行?

Length = 7
''

'07-MAY-07 '

'Hello World '

''

'07-MAY-07 '

'Hello Again'

''

我甚至不明白为什么我会得到这些空白......?

===========================

好的,我将正则表达式更改为@“(\ d {2} - [A-Z] {3} - \ d {2})”;

现在我在一开始就得到一个空行。很小,但我还是不明白为什么?

长度= 5 ''

'07 -MAY-07'

'Hello World'

'07 -MAY-07'

'Hello Again'

''

另外,由于MMM不能是任何三个字母,有没有办法改变正则表达式,以便强制这三个字母(JAN | FEB | MAR | APR | MAY | JUN | JUL | AUG | SEP | OCT | NOV |?DEC)

5 个答案:

答案 0 :(得分:0)

一个简单的正则表达式(不是防弹)将是:

(\d\d-\w\w\w-\d\d .*?(?=(\d\d-\w\w\w-\d\d|$)))

使用另一个匹配或行尾的前瞻来捕获行。

答案 1 :(得分:0)

var str = "07-MAY-07 Hello World 07-MAY-07 Hello Again";

str = str.replace(/(\d{2}-[A-Z]{3}-\d{2}\s)(\D*|\s)/, '$1$2\n');

alert(str);

http://jsfiddle.net/jasongennaro/DAYUG/

答案 2 :(得分:0)

试试这个

  [0-9]{2}-[a-zA-Z]{3}-[0-9]{2}\s*[a-zA-Z]*\s*[a-zA-Z]*

你可以在使用它之前测试正则表达式here

答案 3 :(得分:0)

您使用的是哪种语言?在perl中你可以做类似

的事情
$s = "07-MAY-07 Hello World 07-MAY-07 Hello Again";
$s =~ s/\s(\d\d-\w\w\w-\d\d)/\n$1/g;
print $s;

结果

07-MAY-07 Hello World
07-MAY-07 Hello Again

答案 4 :(得分:0)

空白行是由regex.Split方法引起的。第一场比赛是在比赛开始,所以你在阵列中得到一个额外的条目。你可以这样做:

string input = "07-MAY-07 Hello World 07-MAY-07 Hello Again";
Regex regex =
   new Regex(
      @"(\d{2}-(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)-\d{2})(.(?!\d{2}-(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)-\d{2}))*",
      RegexOptions.IgnoreCase);
foreach (Match match in regex.Matches (input))
{
   Console.WriteLine (match.Value);
}

表达式查找您的日期(包括确切的3个字符的月份),然后匹配所有文本,直到下一个日期字符串。下一场比赛应该在上一场比赛后开始。