C# Regex代替string.replace函数

C# Regex代替string.replace函数,c#,regex,C#,Regex,我见过这个 但是,我正在尝试创建一个正则表达式函数,它可以为我替换此函数: while (fname.Contains("..")) { fname = fname.Replace("..", "."); } if (fname.StartsWith(".")) { fname= fname.Remove(0, 1); } fname = fname.Replace("&", "_"); fname = fname.Replace("#", "_"); fname =

我见过这个

但是,我正在尝试创建一个正则表达式函数,它可以为我替换此函数:

while (fname.Contains(".."))
{
    fname = fname.Replace("..", ".");
}
if (fname.StartsWith(".")) { 
    fname=  fname.Remove(0, 1);
}
fname = fname.Replace("&", "_");
fname = fname.Replace("#", "_");
fname = fname.Replace("{", "_");
fname = fname.Replace("}", "_");
fname = fname.Replace("%", "_");
fname = fname.Replace("~", "_");
fname = fname.Replace("?", "_");
我根本不知道如何编写正则表达式来解决这个问题。
有人能帮我一把吗?

你为什么循环使用
fname=fname.Replace(“…”,”),是否尝试用一个点替换多个点的所有序列

那就是:

fname=Regex.Replace(fname,@"\.+",".");
至于其他方面:

fname=Regex.Replace(
    Regex.Replace(
        fname,
        @"&|\#|\{|\}|%|~|\?",
        "_"
    ),
    @"^\.",
    ""
);

那么,如果你过早发帖,你会期待什么呢@WillVousden当我按enter键时添加的?我正在更新它。我无法显示我正在更新它。你的意思是
而(fname.Contains(“…”)fname=fname.Replace(“…”)也许?如果您在构建正则表达式时遇到困难:@SteffenWinkler有时在.net正则表达式和JS中会有细微的差别。我用。它是俄语的,但你可以使用谷歌翻译你现在没有使用符号模式,但我知道它应该在替换后面(fname,symbolPattern,“”);谢谢:)
string dotsPattern = @"\.\.+"; //2 or more dots.
fname=Regex.Replace(fname, dotsPattern ,".");
String firstSymbolDot = @"^\.";
fname = Regex.Replace(fname, firstSymbolDot, String.Empty);
string symbolPattern = "[&#{}%~?]"; //any of given symbol;
string result = Regex.Replace(fname, symbolPattern, "_");