嘿,这个令人敬畏的社区的第一次海报.
我在C#应用程序中有一个正则表达式来解析变量的赋值:
NewVar = 40
Run Code Online (Sandbox Code Playgroud)
在文本框中输入.我希望我的正则表达式返回(使用Regex.Split)变量的名称和值,非常简单.这是我到目前为止的正则表达式:
var r = new Regex(@"^(\w+)=(\d+)$", RegexOptions.IgnorePatternWhitespace);
var mc = r.Split(command);
Run Code Online (Sandbox Code Playgroud)
我的目标是在正则表达式中修剪空白而不使用返回值的Trim()方法.目前,它可以工作,但它在MatchCollection的开头返回一个空字符串,在结尾处返回一个空字符串.
使用上面的输入示例,这是从Regex.Split返回的:
mc[0] = ""
mc[1] = "NewVar"
mc[2] = "40"
mc[3] = ""
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:为什么它在开头和结尾都返回一个空字符串?
谢谢.
RegEx.Split的共鸣返回四个值就是你只有一个匹配,所以RegEx.Split返回:
RegEx.Split的主要目的是在匹配的正则表达式之间提取任何文本,例如,您可以使用带有"[,;]"模式的RegEx.Split来分割逗号或分号上的文本.在.NET Framework 1.0和1.1中,Regex.Split仅返回拆分值,在本例中为""和"",但在.NET Framework 2.0中,它被修改为还包含在Regex中与()匹配的值,这就是为什么你是看到"NewVar"和"40".
你在找什么Regex.Match,不是Regex.Split.它会完全符合您的要求:
var r = new Regex(@"^(\w+)=(\d+)$");
var match = r.Match(command);
var varName = match.Groups[0].Value;
var valueText = match.Groups[1].Value;
Run Code Online (Sandbox Code Playgroud)
请注意,RegexOptions.IgnorePatternWhitespace意味着您可以在模式中包含额外的空格 - 它与匹配的文本无关.由于您的模式中没有额外的空格,因此不必要.