我在C#中有一个字符串,可以包含多个\n
字符。例如:
string tp = "Hello\nWorld \n\n\n !!";
如果一次出现\n
,我想用某种东西代替它,但是如果一个以上的\n
一起出现在同一位置,我想让它们一个人呆着。因此,对于上面的tp
字符串,我想替换\n
和Hello
之间的World
,因为该位置只有一个,而剩下三个{{1 }}更靠近字符串的结尾,因为它们出现在组中。
如果我尝试在C#中使用\n
方法,它将替换所有方法。我该如何解决这个问题?
答案 0 :(得分:3)
您可以尝试使用正则表达式:只要$
为单字母,就将\n
更改为"*"
:
\n
答案 1 :(得分:0)
使用循环的解决方案:
char[] c = "\t"+ tp + "\t".ToCharArray();
for(int i = 1; i < c.Length - 1; i++)
if(c[i] == '\n' && c[i-1] != '\n' && c[i+1] != '\n')
c[i] = 'x';
tp = new string(c, 1, c.Length-2);
答案 2 :(得分:0)
使用正则表达式并结合negative lookbehind and lookahead:
var test = "foo\nbar...foo\n\nbar\n\n\nfoo\r\nbar";
var replaced = System.Text.RegularExpressions.Regex.Replace(test, "(?<!\n)\n(?!\n)", "_");
// only first and last \n have been replaced
在输入中搜索正则表达式时,它会在找到的任何"\n"
处停止,并验证是否"\n"
不在当前位置后面或前面。
因此,只会替换单个"\n"
。