Regex模式,用于查找两个指定字符串之间的字符串

本文关键字:字符串 两个 之间 模式 用于 查找 Regex | 更新日期: 2023-09-27 18:28:27

我有一个文本文件,从中提取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

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

假设我正在尝试从这行文本中提取源路径。我该如何创建一个在两个字符串之间寻找字符串的模式。例如如何从"源路径:"answers"目标路径:"之间提取源路径字符串?

到目前为止,我所拥有的只是:Regex.Match(行,@"源路径:");

为了测试这一点,我使用http://regexhero.net/tester/很明显,它所做的只是寻找源路径:到目前为止。我如何向前看,直到字符串"Destination Path:"?

Regex模式,用于查找两个指定字符串之间的字符串

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();

您可以使用这个:

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();
}