C# 在C中使用正则表达式提取字符串#

C# 在C中使用正则表达式提取字符串#,c#,regex,C#,Regex,我在C#:“/19/Ora01”中有一个字符串,我想删除“Ora01” 我尝试过,但没有成功: var pattern = @"^(Ora[0-9]{2})$"; var match = Regex.Match(args.Path, pattern); var hour = match.Groups[0].Value; 我做错了什么 如果您的字符串的模式为/19/Ora01 var data = "/19/Ora01".Split("/", StringSplitOptions.Remov

我在C#:“/19/Ora01”中有一个字符串,我想删除“Ora01”

我尝试过,但没有成功:

var pattern = @"^(Ora[0-9]{2})$";

var match = Regex.Match(args.Path, pattern);

var hour = match.Groups[0].Value;
我做错了什么

如果您的字符串的模式为
/19/Ora01

var data = "/19/Ora01".Split("/", StringSplitOptions.RemoveEmptyEntries);

在正则表达式中,
^
表示从字符串开始匹配

就像
$
意味着匹配字符串的结尾


只需从模式中删除
^
,代码就会正常工作。

您也可以使用string.Split。可能比正则表达式快,但取决于您的需要

用string.Split这个看起来像

var result = start.Substring(start.LastIndexOf("/") + 1);
如果要使用正则表达式,必须删除“^”。
为了便于测试和了解更多信息,请查看

这是您想要的正则表达式:

public static void Main(string[] args)
  {
    string pattern = "\\/(.*?)\\/(.+)";
    string text = "/19/Ora01";
    Match match = Regex.Match(text, pattern);
    string first = match.Groups[1].Value;
    string second = match.Groups[2].Value;

    Console.WriteLine(first);
    Console.WriteLine(second);

    Console.ReadLine();
  }
再考虑一下Rahul提供的答案。Rahul
^
表示“字符串的开始”,而“$”表示“字符串的结束”。您要求的内容只包含
Ora
,后跟两个数字。至少删除^2。您也不需要分组。
Ora[0-9]{2}
应该可以:

var pattern = @"Ora[0-9]{2}";

var match = Regex.Match("/19/Ora01", pattern);

var hour = match.Groups[0].Value;
hour.Dump();
打印
Ora01

如果您想在
Ora
之后输入小时部分,则必须将数字分组:

var pattern = @"Ora(?<hour>[0-9]{2})";

var match = Regex.Match("/19/Ora01", pattern);

var hour = match.Groups["hour"].Value;
Console.WriteLine(hour);
您没有解释您想要执行哪种验证,例如斜杠是否重要,是否应该有
19
,以及是否将其视为一年

如果要确保字符串遵循此格式且第一部分为两位数,可以使用eg
@/(\d{2})/Ora(?\d{2})”


仅在格式正确时使用。

正则表达式是执行此操作的最佳方法:

string pattern = "\\/(.*?)\\/(.+)";
string text = "/19/Ora01";
Match match = Regex.Match(text, pattern);
string first = match.Groups[1].Value;
string second = match.Groups[2].Value;

Console.WriteLine(first);
Console.WriteLine(second);

另外,@Panagiotis Kanavos可能是最好的答案,也是最完整的答案。

([A-Z])\w+将为您提供Ora01
^
表示“字符串的开始”,而
“$”表示“字符串的结束”。您要求的内容只包含
Ora`和两位数字。至少删除
^
。你也不需要分组
Ora[0-9]{2}
应该尝试
@/(\d+)/(Ora\d+)
然后
匹配.Group[1]。Value
匹配.Group[2]。Value
为什么?分裂也有不利的一面。这将创建3个临时字符串,需要额外的解析来实际提取所需的值。也没有验证/19/Ora01,是一个来自数据库的字符串,19不是一年,但无论如何我理解你的答案,它非常有用,我会将它标记为解决我问题的字符串。你能帮我做点别的吗?年份可以是1或2位数,所以可以是
/0/Ora01
,也可以是
/19/Ora01
,所以我必须改变这一点:
\d{2}
,但是怎么做呢。@Erjon
\d{1,2}
非常感谢你,你的回答对我很有帮助。
var pattern = @"/(?<year>\d{2})/Ora(?<hour>\d{2})";

var match = Regex.Match("/19/Ora01", pattern);

var hour = match.Groups["hour"].Value;
var year = match.Groups["year"].Value;
Console.WriteLine($"{year} {hour}");
19 01
string pattern = "\\/(.*?)\\/(.+)";
string text = "/19/Ora01";
Match match = Regex.Match(text, pattern);
string first = match.Groups[1].Value;
string second = match.Groups[2].Value;

Console.WriteLine(first);
Console.WriteLine(second);