2

テキスト ファイルがあり、C# で次のような行を抽出します。

Date: 8/20/2013 12:00:00 AM Source Path: \\build\PM\11.0.25.9\ Destination Path: C:\Users\Documents\testing\11.0.25.9\etc\ Folder Updated: 11.0.25.9 File Copied: 11052_0_X.pts

必要な変数を抽出する最も簡単な方法は、それを探すための正規表現パターンを作成することです。

では、このテキスト行からソース パスを抽出しようとしているとしましょう。2 つの文字列の間の文字列を検索するパターンを作成するにはどうすればよいでしょうか。"Source Path:" と "Destination Path:" の間からソース パス文字列を抽出するにはどうすればよいですか?

これまでのところ、これだけです: Regex.Match(line,@"Source Path:");

http://regexhero.net/tester/を使用してこれをテストするには、ソース パスを探すだけです。文字列「Destination Path:」までどのように先を見ることができますか?

4

2 に答える 2

6
string input = @"Date: 8/20/2013 12:00:00 AM Source Path: \\build\PM\11.0.25.9\ Destination Path: C:\Users\Documents\testing\11.0.25.9\etc\ Folder Updated: 11.0.25.9 File Copied: 11052_0_X.pts";
string pattern = @"Source Path:(.+?)Destination Path:";

var src = Regex.Match(input,pattern).Groups[1].Value.Trim();
于 2013-08-20T20:30:55.063 に答える
2

これを使用できます:

var path = Regex.Match(line, @"Source Path:\s*(.*)\s*Destination Path:")
                .Groups[1].Value;

またはこれ(ルックアラウンドアサーションを使用):

var path = Regex.Match(line, @"(?<=Source Path:\s*).*(?=\s*Destination Path:)")
                .Value;

しかし、これほど単純なものでは、実際には正規表現は必要ありません。これも同様に機能します。

var startAt = "Source Path:";
var endAt = "Destination Path:";

var start = line.IndexOf(startAt);
var end   = line.IndexOf(endAt);
if (start >= 0 && end >= 0 && (end >= start + startAt.Length))
{
    var path = line.Substring(start + startAt.Length, 
                              end - start - startAt.Length).Trim();
}
于 2013-08-20T20:34:21.470 に答える