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

提取我需要的变量的最简单方法是创建一个正则表达式模式来查找它。

所以可以说我正在尝试从这行文本中提取源路径。我将如何创建一个在两个字符串之间查找字符串的模式。比如如何从“源路径:”和“目标路径:”之间提取源路径字符串?

到目前为止,我所拥有的是:Regex.Match(line,@"Source Path:");

要使用http://regexhero.net/tester/对此进行测试,显然它所做的只是寻找 Source 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 回答