替换某些字符之间的值

时间:2018-02-09 13:02:16

标签: c# regex

我正在尝试替换字符串中OFFSETROWS之间的值。 我使用下面的正则表达式并且它不起作用。

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

所以我想要的结果就像

OFFSET 5 ROWS

任何人都可以帮助或建议这个正则表达式的错误,因为它不会替换值。

1 个答案:

答案 0 :(得分:5)

这里与正则表达式相关的问题是你没有考虑NUMBER两端的空白字符。添加\s*\s+以便对其进行说明。

使用

string strValue = "OFFSET NUMBER ROWS";
string strIndex = "5";
strValue  = Regex.Replace(strValue , @"(?<=OFFSET\s*)\w+(?=\s*ROWS)", strIndex);
Console.Write(strValue); // => OFFSET 5 ROWS

下面,

  • (?<=OFFSET\s*)是一个正面的后视镜,需要OFFSET和0 +空白字符,紧靠当前位置的左侧
  • \w+ - 1 + word chars
  • (?=\s*ROWS) - 是一个积极的先行者,需要在当前位置右侧立即显示0 +空白字符,然后ROWS子字符串。

或者,在替换模式中使用具有反向引用的捕获组:

strValue = Regex.Replace(strValue , @"(OFFSET\s*)\w+(\s*ROWS)", $"$$1{strIndex}$2");

请参阅[algo.sorting]/3

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