使用C#regex,在两个字符串之间获取一个值

使用C#regex,在两个字符串之间获取一个值,c#,regex,C#,Regex,我的测试数据 Date:Fri 14-Mar-2003 Venue:S.F.S. Crowd:24,172 我感兴趣的数据 Fri 14-Mar-2003 我目前拥有的代码 string datePattern = "Date:(.*?) Venue"; string tempDate = Regex.Match(values[(int)HomeColumnNames.VenueCrowdDate], datePattern).Value; 正在返回的数据 Date:Fri 14-Mar-

我的测试数据

Date:Fri 14-Mar-2003 Venue:S.F.S. Crowd:24,172
我感兴趣的数据

Fri 14-Mar-2003
我目前拥有的代码

string datePattern = "Date:(.*?) Venue";
string tempDate = Regex.Match(values[(int)HomeColumnNames.VenueCrowdDate], datePattern).Value;
正在返回的数据

Date:Fri 14-Mar-2003 Venue

任何建议或帮助都将不胜感激

您正在将单词包含到正则表达式中,因此它们将在提取的字符串中。试一试

string datePattern = @"{\w+}\s+{\d{1,2}-{\w+}-{\d{4,}";

您正在将单词包含到正则表达式中,因此它们将在提取的字符串中。试一试

string datePattern = @"{\w+}\s+{\d{1,2}-{\w+}-{\d{4,}";

您还可以循环匹配的组

var groups = Regex.Match(values[(int)HomeColumnNames.VenueCrowdDate], datePattern).Groups;
Console.WriteLine(groups[1].Value); //Fri 14-Mar-2003

您还可以循环匹配的组

var groups = Regex.Match(values[(int)HomeColumnNames.VenueCrowdDate], datePattern).Groups;
Console.WriteLine(groups[1].Value); //Fri 14-Mar-2003

你是在返回比赛,不是你的捕获小组

下面的代码将允许您显式命名(并随后引用)捕获。没有必要显式命名或编号您的组。。。但这是很好的做法

String groupName = "yourGroupName";
Regex r = new Regex(@"Date:(?<" + groupName + ">.*?) Venue");
Matches m = r.Match(yourTestData);
Console.WriteLine(m.Groups[groupName]);
String groupName=“yourGroupName”;
正则表达式r=新正则表达式(@“日期:(?*)地点”);
匹配m=r.Match(yourTestData);
Console.WriteLine(m.Groups[groupName]);

您返回的是匹配项,而不是您的捕获组

下面的代码将允许您显式命名(并随后引用)捕获。没有必要显式命名或编号您的组。。。但这是很好的做法

String groupName = "yourGroupName";
Regex r = new Regex(@"Date:(?<" + groupName + ">.*?) Venue");
Matches m = r.Match(yourTestData);
Console.WriteLine(m.Groups[groupName]);
String groupName=“yourGroupName”;
正则表达式r=新正则表达式(@“日期:(?*)地点”);
匹配m=r.Match(yourTestData);
Console.WriteLine(m.Groups[groupName]);

您的正则表达式正常。你只需要进入第一组

var match= Regex.Match(values[(int)HomeColumnNames.VenueCrowdDate], datePattern);

match.Groups[0]; //returns full match
match.Groups[1]; //returns 1st group

//Gets MatchCollection
var matches= Regex.Matches(values[ManyAddresses, datePattern);

对于其他示例,使用@bash.d的模式更好。

您的正则表达式还可以。你只需要进入第一组

var match= Regex.Match(values[(int)HomeColumnNames.VenueCrowdDate], datePattern);

match.Groups[0]; //returns full match
match.Groups[1]; //returns 1st group

//Gets MatchCollection
var matches= Regex.Matches(values[ManyAddresses, datePattern);

对于其他示例,使用@bash.d的模式更好。

对于java组,从索引1开始,但是对于c,我认为它是0。@DavutGürbüz,我也不确定。正是这种不确定性,这就是我建议显式组命名的原因:-)数组索引从0开始,我确信并且已经测试过codeindex从0开始,但是0索引给我们匹配的文本而不是组。因此,组1适用于java和c+1对于java组,从索引1开始,但对于c,我认为是0。@DavutGürbüz,我也不确定。正是这种不确定性,这就是我建议显式组命名的原因:-)数组索引从0开始,我确信并且已经测试过codeindex从0开始,但是0索引给我们匹配的文本而不是组。因此,组1适用于java和c+1是的,我的谷歌技能似乎让我失望。是的,我的谷歌技能似乎让我失望。我提供了你的技能,但我认为
@
(文字)字符应该在
但它不匹配。你确定它有效吗?不,你是对的!这是在匆忙的时刻。。。感谢您的澄清我提供了您的澄清,但我认为
@
(文字)字符应该在
之前,并且不匹配。您确定它有效吗?不,您是对的!这是在匆忙中…感谢您的澄清