0

次のようなファイルがいくつかあります。

prtx010.prtx010.0199.785884.351.05042413

prtx010.prtx010.0199.123456.351.05042413

prtx010.prtx010.0199.122566.351.05042413

prtx010.prtx010.0199.this.351.05042413

prtx010.prtx010.0199.something.351.05042413

ここで、これらのファイルを部分文字列にして、次の結果を得たいと思います

785884

123456

122566

(これは左 21 右 -12)

問題は、これらのファイルが数値で6桁の長さである場合にのみ、指定された位置の間でそれらのファイルをサブストリング化したいということです。

これを達成する方法についてのアイデアはありがたく受け取りました。

現時点では、これは私が持っているものですが、すべてのファイルの部分文字列です:

//Rename all files
DirectoryInfo di = new DirectoryInfo(@"\\prod\abc"); //location of files
DirectoryInfo di2 = new DirectoryInfo(@"\\prod\abc\");//where they are going
string lstrSearchPattern = "prtx010.prtx010.0199.";
foreach (FileInfo fi in di.GetFiles(lstrSearchPattern + "*"))

{
    string newName = fi.Name.Substring(lstrSearchPattern.Length, 6);
    fi.MoveTo(di2 + newName);

    //do something with the results
}
di = null;
4

1 に答える 1

0

次にnewName、関心のある6文字が含まれます。たとえば、が含まれる122566場合や、が含まれる場合がありますthis.3。正規表現を使用して、それが数値であるかどうかを判別できます。

if (Regex.Matches(newName, @"^\d{6}$"))
{
    // The string is numeric.
}

実際には、ピリオドの後のパターンがである可能性があるため、それは完全には真実ではありません123456abc。探しているのは、プレフィックス文字列の後にピリオド、6桁、および別のピリオドが続くことです。だからあなたが欲しいのは:

Regex re = new Regex(@"$prtx010\.prtx010\.0199\.(\d{6})\.)");
Match m = re.Match(fi.Name);
if (m.Success)
{
    // The string is 6 digits
    string newName = m.Groups[1].Value;
}
于 2013-02-07T14:25:17.927 に答える