这是一个简单的例子
string text = "parameter=120\r\n";
int newValue = 250;
text = Regex.Replace(text, @"(?<=parameter\s*=).*", newValue.ToString());
更换后, text
将为"parameter=250\n"
。 Replace()方法删除'\ r'。默认情况下它是否使用unix样式换行?将\b
添加到我的正则表达式(?<=parameter\s*=).*\b
可以解决问题,但我认为应该有更好的方法来解析使用Windows样式换行的行。
答案 0 :(得分:1)
.
与\n
不匹配。如果您希望匹配,则必须使用单行模式..
(?s)(?<=parameter\s*=).*
^
(?s)
会切换单行模式
答案 1 :(得分:1)
看看this answer。简而言之,句点(.
)在几乎所有正则表达式实现中都匹配除\n
之外的每个字符。与替换无关 - 特别是你告诉它删除任意数量的.
,这也会淹没\r
。
现在无法测试,但您可以将其重写为(?<=parameter\s*=)[^\r\n]*
,以明确说明您不允许使用哪些字符。
答案 2 :(得分:1)
试试这个:
string text = "parameter=120\r\n";
int newValue = 250;
text = Regex.Replace(text, @"(parameter\s*=).*\r\n", "${1}" + newValue.ToString() + "\n");
text
的最终价值:
参数= 250 \ n
明确匹配回车符和换行符。只匹配以\r\n
结尾的行。