を文字列からファイルパスまたはファイル名を抽出します。は、入力として次の文字列を取るC#で
var input = @"The file is: ""c:\sampleDirectory\sample subdirectory\sampleFileName.txt\"" which is a text file";
は、どのように私は上記の文字列からのみのファイルパスを抽出することができます。
Regexなどを使用する方法が好ましい
を文字列からファイルパスまたはファイル名を抽出します。は、入力として次の文字列を取るC#で
var input = @"The file is: ""c:\sampleDirectory\sample subdirectory\sampleFileName.txt\"" which is a text file";
は、どのように私は上記の文字列からのみのファイルパスを抽出することができます。
Regexなどを使用する方法が好ましい
編集:
eocronによって答えとして、それはLastIndexOf
で行うことができます。
しかし、ここで正規表現のソリューションです:
Match match = Regex.Match(input, @"""(.*)\\(.*\..*)[\\]?""", RegexOptions.IgnoreCase);
if (match.Success)
{
string path = match.Groups[1].Value;
string filename = match.Groups[2].value;
}
私はあなたが本当に代わりに、システムでの運用に建ての正規表現またはのlastIndexOfを使用する必要がある場合、質問は明確に、Windowsのパスを持っていますが、あなたはおそらくPath.DirectorySeparatorCharを使用する必要があることを認識しています。 IO.Path – shunty
与えられたサンプルのためのソリューションは私に完全に間違った結果を与える:[https://dotnetfiddle.net/eYzJsT](https://dotnetfiddle.net/eYzJsT)私は引用符の中の文字列だけだと思った –
@MostafaArmandiあなたが望んでいたように与えられた。とにかく私も答えを編集し、それを行っている。ここでは、https://dotnetfiddle.net/iz9Lmv何をしたいです – Zeus
ご入力パターンの場合は、まさにこのようになります、あなたは簡単に正規表現せずにこれを行うことができます:
var magic1 = 14;//index of first quotation mark
var magic2 = 22;//suffix index of last quotation mark
var result = str.Substring(magic, str.Lenght-magic2-magic1);
魔法の答えはSO上適切ではありません」その場合の14/22。(だから、より一般的なのです) – Slai
:今、どのように 'input.Split(約『"』 [そしてもちろん、実際のファイルではありません) ' –
だけ「」 –
の間で読むことを.Substring ..あなたは.IndexOf –
で決定したの位置をその上に、最終的なバックスラッシュと分割のインデックスを取得あなたは本当にそれを正規表現で複雑にする必要がありますか? System.IO(それのOSに優しいあまりにも、私は信じている) – shunty