[英]C# Regex.Split - Subpattern returns empty strings
嘿,這個令人敬畏的社區的第一次海報。
我在我的C#應用程序中有一個正則表達式來解析變量的賦值:
NewVar = 40
在文本框中輸入。 我希望我的正則表達式返回(使用Regex.Split)變量的名稱和值,非常簡單。 這是我到目前為止的正則表達式:
var r = new Regex(@"^(\w+)=(\d+)$", RegexOptions.IgnorePatternWhitespace);
var mc = r.Split(command);
我的目標是在正則表達式中修剪空白而不使用返回值的Trim()方法。 目前,它可以工作,但它在MatchCollection的開頭返回一個空字符串,在結尾處返回一個空字符串。
使用上面的輸入示例,這是從Regex.Split返回的:
mc[0] = ""
mc[1] = "NewVar"
mc[2] = "40"
mc[3] = ""
所以我的問題是:為什么它在開頭和結尾都返回一個空字符串?
謝謝。
共鳴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;
請注意,RegexOptions.IgnorePatternWhitespace意味着您可以在模式中包含額外的空格 - 它與匹配的文本無關。 由於您的模式中沒有額外的空格,因此不必要。
從文檔中 , Regex.Split()
使用正則表達式作為分隔符進行拆分。 它不會將捕獲的組從輸入字符串中分離出來。 此外, IgnorePatternWhitespace
忽略模式中未轉義的空格,而不是輸入。
相反,請嘗試以下方法:
var r = new Regex(@"\s*=\s*");
var mc = r.Split(command);
請注意,空格實際上是作為分隔符的一部分使用的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.