如果我有:
Some text
More text
Even more text
获得更优雅的方式是什么:
Some text
More text
Even more text
所有人都知道重复令牌的数量
答案 0 :(得分:7)
使用正则表达式的方法是
string replaced = System.Text.RegularExpressions.Regex
.Replace(input, @"(?:\r\n)+", "\r\n");
((?:...)
语法是一个非捕获组,可以用捕获组替换(只有(...)
),但效率稍低且不易读,IMO。)< / p>
答案 1 :(得分:6)
也许是这样的:
var result = string.Join("\r\n", s.Split(new[]{"\r\n"}, StringSplitOptions.RemoveEmptyEntries))
答案 2 :(得分:3)
使用正则表达式。匹配整个字符串'\ r \ n'并替换为单个'\ r \ n'
您需要的功能:
pattern = "(\\r\\n)+";
Regex rgx = new Regex(pattern);
newString = rgx.Replace(oldString, "\r\n");
编辑:抱歉错过了早期的
答案 3 :(得分:1)
我不知道C#语法,只是使用一个简单的正则表达式替换(\ r \ n)+和(\ r \ n)
答案 4 :(得分:0)
您可以使用正则表达式:
str = Regex.Replace(str, "(\r\n)+", "\r\n")
另一种方法是拆分换行符,然后再次加入:
str = String.Join("\r\n", str.Split(new string[]{"\r\n"}, StringSplitOptions.RemoveEmptyEntries);
考虑是否应使用字符串文字"\r\n"
或Environment.NewLine
常量。这取决于数据的来源。
答案 5 :(得分:0)
如果\ r \ n表示通常的作用,则用一个空白行替换连续的空白行。
我确信有这方面的工具。不过我不会知道C#。
答案 6 :(得分:0)
没有正则表达式(让我的头受伤)
string RemoveRepeated(string needle, string haystack)
{
string doubleNeedle = needle + needle;
while (haystack.IndexOf(doubleNeedle) >= 0)
haystack = haystack.Replace(doubleNeedle, needle);
return haystack;
}
内存分配更少
string RemoveRepeated(string needle, string haystack)
{
if (needle == null)
throw new ArgumentNullException("needle");
if (haystack == null)
throw new ArgumentNullException("haystack");
if (needle == string.Empty || haystack == string.Empty)
return haystack;
string doubleNeedle = needle + needle;
var buffer = new StringBuilder(haystack);
int originalLength;
do
{
originalLength = buffer.Length;
buffer.Replace(doubleNeedle, needle);
} while (originalLength != buffer.Length);
return buffer.ToString();
}
初始检查在第一个版本中同样有效
答案 7 :(得分:0)
最快的方式:
Regex reg = new Regex(@"(\r\n)+");
string replacedString = reg.Replace("YOUR STRING TO BE REPLACED", Environment.NewLine);
答案 8 :(得分:0)
就在几天前,在这里几乎有同样的问题。没有NewLine问题,而是空格。
还有一个人喜欢使用Split,Join方法,另一个人使用正则表达式。因此Jon对两者进行了比较,结果表明编译正则表达式要快得多。
但我再也找不到这个问题......