1

这是一个简单的例子

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 样式换行符的行。

4

3 回答 3

1

.默认情况下不匹配\n..如果你想要它匹配你必须使用单行模式..

(?s)(?<=parameter\s*=).*
 ^

(?s)将切换单行模式

于 2013-10-04T08:31:47.253 回答
1

看看这个答案。简而言之,句点 ( .) 匹配\n几乎所有正则表达式实现中的每个字符。与 Replace 无关 - 您告诉它删除任意数量的.,这也会引起注意\r

现在无法测试,但您可以重写它(?<=parameter\s*=)[^\r\n]*以明确说明您想要禁止哪些字符。

于 2013-10-04T08:32:31.220 回答
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

于 2013-10-04T08:41:29.270 回答