C# 在C中使用正则表达式提取字符串#
我在C#:“/19/Ora01”中有一个字符串,我想删除“Ora01” 我尝试过,但没有成功: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
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);