使用正则表达式替换字符串.replace函数

3
我看过这个 C#中的正则表达式速查表
然而,我正在尝试创建一个可以替换它的正则表达式函数:
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("?", "_");

我不知道如何写正则表达式来解决这个问题。有人能帮我吗?


3
如果你过早地发布内容,你期望得到什么结果? - Will Vousden
1
你是不是想表达 while (fname.Contains("..")) fname = fname.Replace("..", "."); 这个意思? - Kieren Johnstone
1
如果您在构建正则表达式时遇到困难:请尝试使用此工具进行构建 - Steffen Winkler
1
@SteffenWinkler 有时候 .net 正则表达式和 JS 会有一些小差异。我使用 http://sharpdev.ru/Regex/Sharp 。它是俄语的,但你可以使用谷歌翻译。 - Dmitrii Dovgopolyi
@DmitryDovgopoly 到目前为止,我对此没有任何问题,但还是谢谢你提供的链接。 - Steffen Winkler
显示剩余7条评论
2个回答

7
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, "_");

你现在没有使用 symbolPattern ,但我知道它应该放在 Replace(fname, symbolPattern,"_") 的后面。 - Rob

0

你为什么要循环遍历 fname=fname.Replace("..", ".");,你是想用一个点替换所有超过一个点的序列吗?

就是这样:

fname=Regex.Replace(fname,@"\.+",".");

至于其他人:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接