无法RegEx替换

dhi*_*chl 5 .net c# regex exception

我有以下内容:

文本:

field id ="25"ordinal ="15"value ="&$ 01234567890- $ 2000-"

正则表达式:

(?<=值= ").*(?=")

替换字符串:

&$ 09876543210- $ 2000-


当我在Expresso中运行Regex Replace时 - 它崩溃了应用程序.

如果我在C#中运行Regex.Replace,我会收到以下异常:

ArgumentException的

解析"&$ 01234567890- $ 2000-" - 捕获组编号必须小于或等于Int32.MaxValue.

Ahm*_*eed 11

$N替换模式中的A 指的是第N个捕获组,因此正则表达式引擎认为您要引用捕获组编号"09876543210"并抛出ArgumentException.如果要$在替换字符串中使用文字符号,请将其加倍以转义符号:& $$09876543210-$$2000-

string input = @"field id=""25"" ordinal=""15"" value=""& $01234567890-$2000-""";
string pattern = @"(?<=value="").*(?="")";
string replacement = "& $$09876543210-$$2000-";
string result = Regex.Replace(input, pattern, replacement);
Run Code Online (Sandbox Code Playgroud)

此外,您的模式目前是贪婪的,可能比预期更匹配.为了使它非贪婪的使用,.*?所以它不会在字符串后面的另一个双引号之外匹配,或者[^"]*它匹配除双引号之外的所有内容.更新的模式将是:@"(?<=value="").*?(?="")"@"(?<=value="")[^""]*(?="")".如果你从未期望value属性为空,我建议使用+而不是*在任何模式中使用它来确保它匹配至少一个字符.