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

この問題を解決する正規表現の書き方がわかりません。誰か手を貸してくれませんか?

4

2 に答える 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, "_");
于 2012-12-20T08:17:32.883 に答える
0

なぜループしているのですfname=fname.Replace("..", ".");か、複数のドットのすべてのシーケンスを1つのドットだけに置き換えようとしていますか?

それは:

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

その他について:

fname=Regex.Replace(
    Regex.Replace(
        fname,
        @"&|\#|\{|\}|%|~|\?",
        "_"
    ),
    @"^\.",
    ""
);
于 2012-12-20T08:16:58.470 に答える