Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 替换某些字符之间的值_C#_Regex - Fatal编程技术网

C# 替换某些字符之间的值

C# 替换某些字符之间的值,c#,regex,C#,Regex,我试图替换字符串中偏移量和行之间的值。 我正在使用下面的正则表达式,但它不起作用 string strValue = "OFFSET NUMBER ROWS" string strIndex = "5"; strValue = Regex.Replace(strValue , @"(?<=OFFSET)(\w+?)(?=ROWS)", strIndex); 任何人都可以帮助或建议这个正则表达式有什么问题,因为它不替换值。这里与正则表达式相关的问题是,您没有考虑到数字两端的空格字符

我试图替换字符串中
偏移量
之间的值。 我正在使用下面的正则表达式,但它不起作用

 string strValue = "OFFSET NUMBER ROWS"
 string strIndex = "5";
 strValue  = Regex.Replace(strValue , @"(?<=OFFSET)(\w+?)(?=ROWS)", strIndex);

任何人都可以帮助或建议这个正则表达式有什么问题,因为它不替换值。

这里与正则表达式相关的问题是,您没有考虑到
数字两端的空格字符。添加
\s*
\s+
以说明它们

使用


解决方案与捕获组之间的差异有点棘手,因为第一个反向引用后面跟一个数字,因此您不能使用常规的
$1
语法,必须使用明确的形式,
${1}

如果不匹配空格字符,请使用
@”(?What's“不起作用“意思?它什么都不做吗?它是否引发异常?它是否输出了错误的字符串?“不起作用”不是对问题的有用描述。在构造用于替换的reg-ex模式时,您应该首先检查您的模式是否匹配。对于该作业,您可以使用
IsMatch
Console.WriteLine(Regex.IsMatch它成功了!Thanks@vicky我在回答中解释了修复方法,并添加了替代解决方案。
OFFSET 5 ROWS
string strValue = "OFFSET NUMBER ROWS";
string strIndex = "5";
strValue  = Regex.Replace(strValue , @"(?<=OFFSET\s*)\w+(?=\s*ROWS)", strIndex);
Console.Write(strValue); // => OFFSET 5 ROWS
strValue = Regex.Replace(strValue , @"(OFFSET\s*)\w+(\s*ROWS)", $"${{1}}{strIndex}$2");