Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何更改多个字符';s组合';这是属于那种人的_C#_.net_Regex_String - Fatal编程技术网

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);