C# 如何更改多个字符';s组合';这是属于那种人的
在我的应用程序中,我想编辑字符串(将多个实例作为一个实例) 例如,我有字符串:C# 如何更改多个字符';s组合';这是属于那种人的,c#,.net,regex,string,C#,.net,Regex,String,在我的应用程序中,我想编辑字符串(将多个实例作为一个实例) 例如,我有字符串: string str = "/r/n/r/n/r/n Some text /r/n/r/n/r/n 45678123"; 想要的结果是: "/r/n Sometext /r/n 45678123"; 函数类似: string newStr = str.MakeToOneInstance("/r/n"); 我需要使其动态化(在我的示例中,我不知道有多少个/r/n组合) 它可以是任何组合,再举一个例子——>“你有答
string str = "/r/n/r/n/r/n Some text /r/n/r/n/r/n 45678123";
想要的结果是:
"/r/n Sometext /r/n 45678123";
函数类似:
string newStr = str.MakeToOneInstance("/r/n");
我需要使其动态化(在我的示例中,我不知道有多少个/r/n组合)
它可以是任何组合,再举一个例子——>“你有答案吗”代码>
我知道我可以创建使用正则表达式的字符串扩展方法,但问题是我是否有类似于.Net中内置的方法,或者是否有原始的执行方法…您可以使用Regex.Replace(input,@“(?:\r\n){2,}”,Environment.NewLine)
这将用一个新行替换多次出现的\r\n
您可以将其放入如下扩展中:
public static class MyExtensions
{
public static string MakeToOneInstance(this String str, string toReplace)
{
return Regex.Replace(str, string.Format("\\b(?:{0}){1}\\b", Regex.Escape(toReplace), "{2,}"), toReplace);
}
}
你想怎么用就怎么用
例如:
"oooooo loop".MakeToOneInstance("o")
"o loop"
替代办法。如果没有太多可替换的内容(如您的示例),则可能比正则表达式工作得更快
编辑:这种方法比正则表达式(mono)快10-30倍,但两者都非常快(微秒),因此,如果调用不太多,我会投正则表达式的票,因为它可读性更强。是否还需要删除某些文本之间的空格?使用正则表达式替换,正如您所建议的,不仅仅是特定的组合,您是指回车符和换行符组合中的“\r\n”
”吗?不仅仅是/r/n这是一个示例,它可以是类似于“aaaaaaa循环”->str.MakeToOneInstance(“a”);->“循环”;我认为OP只想保留原始字符串的一个实例,有点像:“删除此子字符串的所有重复项”,但这个正则表达式仍然是可行的(不,没有用于此项的内置方法,如果没有正则表达式,我将使用string.Split(新字符串[]{”/r/n},StringSplitOptions.removeMptyEntries)
然后string.Join()
再问一遍。关于编辑:toReplace
不应该被转义吗?@AdrianoRepetti:你应该回答这个问题,我认为这更适合这个问题requirements@AdrianoRepetti是的,它应该是,很好的通知。@musefan我不确定,regex(有一些修正)比创建成吨的临时字符串要快得多,节省的资源也少得多。我的观点是,如果需要替换的是任何特殊的正则表达式序列,那么它就不起作用了。例如,输入:“[x][x]loop”
,替换为“[x]”“
(另外,我认为boundries这个词不符合要求,但我可能错了)
"oooooo loop".MakeToOneInstance("o")
"o loop"
string oldStr;
do
{
oldStr = str;
str = str.Replace("\r\n\r\n", "\r\n");
}
while (oldStr.Length != str.Length);