3

私は次のような文字列を持っています

string test = "http://example.com/upload/user/80_747.jpg"
string test2 = "http://example.com/upload/user/80_4747.jpg"

どちらの場合も、「747」または「4747」が必要です。これには自動または既製の機能がありますか、それとも完全に手動で行う必要があります。

ASP.NET C# 4.0

4

7 に答える 7

3

これには正規表現がうまく機能するはずです。のようなもの@"_(\d+)\."

Regex.Match ("http://example.com/upload/user/80_747.jpg",   @"_(\d+)\.")
    .Groups[1]
    .Captures[0]
    .Value
于 2012-04-19T18:42:44.640 に答える
2
int startIndex = test.LastIndexOf('_');
int endIndex = test.LastIndexOf('.');
return test.Substring(startIndex, endIndex - startIndex);

.net4 を使用しているため、文字列形式が現在述べられているとおりであれば、linq で実行できます。

return new string(test.SkipWhile(x=>x!='_').Skip(1).TakeWhile(x=>x!='.').ToArray());
于 2012-04-19T18:43:39.833 に答える
1

を使用System.IO.Pathて、拡張子なしでファイル名を取得できます。そのファイル名から必要なフラグメントを手動で解析する必要があります。フレームワークを使用して、パス全体の正規表現をそのまま使用すると、フォルダー名の 1 つに「_」が含まれている場合など、エラーが発生しにくくなります。

于 2012-04-19T18:44:53.407 に答える
1

文字列を _ 文字で分割し、結果配列の最後の文字列を取得してから、もう一度分割することができます。文字を取得し、結果配列の最初の文字列を取得します。

JSで

test.split('_')[1].split('.')[0];

CS では、String クラスの SubString メソッドと IndexOf メソッドを使用します。

于 2012-04-19T18:42:19.540 に答える
0

test.LastIndexOf('_')_ 文字の最後の出現を見つけるために使用します。

于 2012-04-19T18:42:54.420 に答える
0
test
    .ToCharArray()
    .Reverse()
    .SkipWhile(c =>
    {
        int i;
        return !int.TryParse(c.ToString(), out i);
    })
    .TakeWhile(c => c != '_');

あなたの要求には間違いないと思います。

于 2012-04-19T19:09:58.617 に答える
0
string val = Path.GetFileNameWithoutExtension(test.Substring(test.LastIndexOf('_') + 1));
于 2012-04-19T18:47:22.157 に答える