我正在尝试返回字符串的一部分,我想在第一个斜线之前返回所有内容:
EC22941C/02/ORI
应该给我:EC22941C
我使用http://www.regexr.com/来构建我的表达式:
(EC.+?)\/.+
根据我的文字进行测试时:
EC22941C/02/ORI
它正确告诉我第一组是
EC22941C
当我把它放入C#:
public static string GetInstructionRef(string supplierReferenceId)
{
// The instruciton ref is the bit before the slash
var match = Regex.Match(supplierReferenceId, @"(EC.+?)\/.+");
if (match == null || match.Groups.Count == 0)
return "";
// Return the first group which is the instruction ref
return match.Groups[0].Value;
}
我得到的结果是:
EC22941C/02/ORI
我尝试了许多不同的模式,他们似乎都做了同样的事情。
有谁知道我做错了什么?
答案 0 :(得分:1)
问题是您返回了错误的组索引,0
将返回整个匹配,而1
返回捕获括号的匹配上下文 - 从左到右编号。
return match.Groups[1].Value;
答案 1 :(得分:1)
^EC[^\/]+
您可以简单地使用它并避免使用组。参见演示。
https://regex101.com/r/bW3aR1/6
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
}
}
答案 2 :(得分:0)
您应该使用match.Groups[1].Value
。
match.Groups[0].Value
返回整个字符串(如果它与模式匹配)。
此外,您还想更改if条件。 :)