在两个指定字符串之间查找字符串的正则表达式模式

时间:2013-08-20 20:28:15

标签: c# regex

我有一个文本文件,我在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/对此进行测试,显然它所做的只是寻找源路径:到目前为止。我怎么能向前看,直到字符串“Destination Path:”?

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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();
}