C# 为什么这个正则表达式不返回正确的匹配项?
我试图返回字符串的一部分,我想返回第一个斜杠之前的所有内容:C# 为什么这个正则表达式不返回正确的匹配项?,c#,regex,C#,Regex,我试图返回字符串的一部分,我想返回第一个斜杠之前的所有内容: EC22941C/02/ORI 应该给我:EC22941C 我习惯于建立自己的表达方式: (EC.+?)\/.+ 根据我的文本进行测试时: EC22941C/02/ORI 它正确地告诉我第一组是 EC22941C 当我把它放入C#时: 我得到的结果是: EC22941C/02/ORI 我尝试了许多不同的模式,它们似乎都做了相同的事情 有人知道我做错了什么吗?问题是您返回了错误的组索引,0将返回整个匹配项,1返回捕获括号的匹配
EC22941C/02/ORI
应该给我:EC22941C
我习惯于建立自己的表达方式:
(EC.+?)\/.+
根据我的文本进行测试时:
EC22941C/02/ORI
它正确地告诉我第一组是
EC22941C
当我把它放入C#时:
我得到的结果是:
EC22941C/02/ORI
我尝试了许多不同的模式,它们似乎都做了相同的事情
有人知道我做错了什么吗?问题是您返回了错误的组索引,
0
将返回整个匹配项,1
返回捕获括号的匹配上下文-从左到右编号
return match.Groups[1].Value;
您应该使用
match.Groups[1].Value
match.Groups[0]。Value
返回整个字符串(如果它与模式匹配)
此外,您还需要更改if条件。:)
您可以简单地使用它,避免使用组。请参阅演示
哦,老兄,我觉得自己太傻了!它正盯着我的脸,谢谢!
return match.Groups[1].Value;
^EC[^\/]+
string strRegex = @"^EC[^\/]+";
Regex myRegex = new Regex(strRegex, RegexOptions.Multiline);
string strTargetString = @"EC22941C/02/ORI";
foreach (Match myMatch in myRegex.Matches(strTargetString))
{
if (myMatch.Success)
{
// Add your code here
}
}