Regex.Replace删除“\ r \ n”中的'\ r'字符

时间:2013-10-04 08:28:45

标签: c# .net regex

这是一个简单的例子

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

3 个答案:

答案 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结尾的行。