完成正则表达式匹配后删除不匹配的字符串部分 - c#

时间:2014-03-14 05:54:44

标签: c# regex

我有像这样的正则表达式

String ddmmyyyy = @"[0-9]{1,4}\p{P}[0-9]{1,2}\p{P}[0-9]{1,4}";

在我的程序中,我遇到一个字符串,它是“animal14-07-2014preserve”(mystring)。当我使用以下简单的代码来检查任何匹配时,比如

Regex rgx = new Regex(ddmmyyyy, RegexOptions.IgnoreCase);
MatchCollection matches = rgx.Matches(mystring);
if (matches.Count > 0)
   Console.Writeline("Date : " + mystring);

但是在这里,我不仅仅是字符串的“匹配”部分,即“14-07-2014”,而是完整的字符串。

有没有办法让整个字符串中的'匹配'部分?请帮忙。

2 个答案:

答案 0 :(得分:3)

这样做:

string mystring = "animal14-07-2014preserve";
String ddmmyyyy = @"[0-9]{1,4}\p{P}[0-9]{1,2}\p{P}[0-9]{1,4}";
Console.WriteLine(Regex.Match(mystring, ddmmyyyy).Value);

您必须在匹配后使用Value才能获得匹配的部分。如果您想匹配多个日期,请使用Matches()

答案 1 :(得分:2)

MatchCollectionMatch个对象的数组(遗憾的是,从通用前的日子开始,因此它被公开为IEnumerable,或者只是普通的object)。每个Match对象都有一个Value字段,您可以阅读。

foreach (Match match in matches.Cast<Match>())
{
  string value = match.Value;

  // handle match value
}

你也可以使用Regex.Match作为一个整体引用匹配的部分,并获取一个Match对象而不是集合

Match match = Regex.Match(input, pattern);
string value = match.Value