我想用/*
替换所选文本中的//
。
我用正则表达式来做这件事。当我使用任何其他字符串时它起作用。但是当我使用时:
String result = System.Text.RegularExpressions.Regex.Replace(seltext,"/*","//");
它显示:
/* int a,b; // sample input
///*i//n//t//a//,//b//; // sample output
相反,我想:
// int a,b;
答案 0 :(得分:3)
*
在正则表达式中具有特殊含义 - 它表示"匹配前面字符/组中的0或更多"。
听起来你根本不想要正则表达式 - 你只想要
string result = seltext.Replace("/*", "//");
如果您真的想使用正则表达式,则需要转义*
(以及其他各种字符,如果您使用它们):
string result = Regex.Replace(seltext, @"/\*", "//");
请注意使用逐字字符串文字(由字符串开头的@
表示),以避免因C#字符串字面原因而逃避\
。您需要使用"/\\*"
并不清楚。逐字字符串文字对于正则表达式非常方便。
我建议在尝试在源代码上使用简单的文本操作(包括正则表达式)时要小心。例如,假设将替换应用于上面的第一个代码片段......
答案 1 :(得分:2)
您的问题是为什么......输出错误?
让我们从WHY
开始,然后我们将看看修复。
问题的核心是/*
能够匹配空字符串。因此,在每个位置,您都会插入//
您需要逃离量词*
*
表示“匹配前面零次或多次的内容”。/*
与/*
不匹配,而是空字符串(零斜线)或一系列斜杠:////
*
,请使用反斜杠\*
对其进行转义。因此,您的正则表达式变为/\*
/*
匹配字符串中的每个位置
/*
可以匹配空字符串,所以它匹配每个位置。//
,因此您的结果 在C#代码中:不仅替换/*
,还替换/******
没有必要为正确的文字/*
使用正则表达式,因此为了使其更有趣,我们不仅会替换/*
而是/*****
。这样做,我们在+
之后添加\*
量词。一行就足够了:
string resultString = Regex.Replace(s1, @"/\*+", "//");