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");