1

いくつかの文字列があり、最後の .something を新しい文字列に置き換えたいと思います。例として:

string replace = ".new";
blabla.test.bla.text.jpeg => blabla.test.bla.text.new
testfile_this.00001...csv => testfile_this.00001...new

なので、いくつ.....あってもいいので、最後の1つと、その次の文字列だけを変更したいと思い.ます。

私は C# にPath.ChangeExtensionがあるのを見ましたが、ファイルとの組み合わせでのみ機能します- これを文字列のみで使用する方法はありませんか? 本当に正規表現が必要ですか?

4

6 に答える 6

4

使用できますstring.LastIndexOf('.');

string replace = ".new"; 
string test = "blabla.test.bla.text.jpeg";
int pos = test.LastIndexOf('.');
if(pos >= 0)
    string newString = test.Substring(0, pos-1) + replace;

もちろん、LastIndexOf が最終ポイントを見つけることを確認するために、いくつかのチェックが必要です。

ただし、他の回答を見ると、 Path.ChangeExtension は機能しますが、オペレーティングシステムに依存するファイル処理クラスのメソッドを使用して文字列を操作するのは適切ではないと言えます。(もちろん、この文字列が本当にファイル名である場合、私の異議は無効です)

于 2012-07-25T13:26:31.563 に答える
4
string replace = ".new";
string p = "blabla.test.bla.text.jpeg";
Console.WriteLine(Path.GetFileNameWithoutExtension(p) + replace);

出力:

blabla.test.bla.text.new
于 2012-07-25T13:26:53.247 に答える
4

ChangeExtension宣伝どおりに機能するはずです。

string replace = ".new";
string file = "testfile_this.00001...csv";

file = Path.ChangeExtension(file, replace);

>> testfile_this.00001...new
于 2012-07-25T13:29:40.437 に答える
1
string s = "blabla.test.bla.text.jpeg";
s = s.Substring(0, s.LastIndexOf(".")) + replace;
于 2012-07-25T13:27:37.743 に答える
1

いいえ、これには正規表現は必要ありません。.LastIndexOf と .Substring だけで十分です。

string replace = ".new";
string input = "blabla.bla.test.jpg";

string output = input.Substring(0, input.LastIndexOf('.')) + replace;
// output = "blabla.bla.test.new"
于 2012-07-25T13:28:21.287 に答える
0

この機能をご利用ください。

public string ReplaceStirng(string originalSting, string replacedString)
{
    try
    {
        List<string> subString = originalSting.Split('.').ToList();
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < subString.Count - 1; i++)
        {
            stringBuilder.Append(subString[i]);
        }
        stringBuilder.Append(replacedString);
        return stringBuilder.ToString();
    }
    catch (Exception ex)
    {
        if (log.IsErrorEnabled)
            log.Error("[" + System.DateTime.Now.ToString() + "] " + System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName + " :: " + System.Reflection.MethodBase.GetCurrentMethod().Name + " :: ", ex);
            throw;
    }
}
于 2012-07-25T13:36:37.583 に答える