[英]Regex to match a path in C#
I'm new with regular expressions. 我是正则表达式的新手。 I need to extract the path from the following lines: 我需要从以下行中提取路径:
XXXX c:\mypath1\test
YYYYYYY c:\this is other path\longer
ZZ c:\mypath3\file.txt
I need to implement a method that return the path of a given line. 我需要实现一个返回给定行路径的方法。 The first column is a word with 1 or more characters, never is empty, the second column is the path. 第一列是包含1个或多个字符的单词,从不为空,第二列是路径。 The separator could be 1 or more spaces, or one or more tabs, or both. 分隔符可以是1个或多个空格,或者一个或多个标签,或两者。
It sounds to me like you just want 这听起来就像你想要的那样
string[] bits = line.Split(new char[] { '\t', ' ' }, 2,
StringSplitOptions.RemoveEmptyEntries);
// TODO: Check that bits really has two entries
string path = bits[1];
(This is assuming that the first column never contains spaces or tabs.) (这假设第一列永远不会包含空格或制表符。)
EDIT: As a regular expression you can probably just do: 编辑:作为一个正则表达式你可能只是做:
Regex regex = new Regex(@"^[^ \t]+[ \t]+(.*)$");
Sample code: 示例代码:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main(string[] args)
{
string[] lines =
{
@"XXXX c:\mypath1\test",
@"YYYYYYY c:\this is other path\longer",
@"ZZ c:\mypath3\file.txt"
};
foreach (string line in lines)
{
Console.WriteLine(ExtractPathFromLine(line));
}
}
static readonly Regex PathRegex = new Regex(@"^[^ \t]+[ \t]+(.*)$");
static string ExtractPathFromLine(string line)
{
Match match = PathRegex.Match(line);
if (!match.Success)
{
throw new ArgumentException("Invalid line");
}
return match.Groups[1].Value;
}
}
StringCollection resultList = new StringCollection();
try {
Regex regexObj = new Regex(@"(([a-z]:|\\\\[a-z0-9_.$]+\\[a-z0-9_.$]+)?(\\?(?:[^\\/:*?""<>|\r\n]+\\)+)[^\\/:*?""<>|\r\n]+)");
Match matchResult = regexObj.Match(subjectString);
while (matchResult.Success) {
resultList.Add(matchResult.Groups[1].Value);
matchResult = matchResult.NextMatch();
}
} catch (ArgumentException ex) {
// Syntax error in the regular expression
}
Breakdown : 分解 :
@"
( # Match the regular expression below and capture its match into backreference number 1
( # Match the regular expression below and capture its match into backreference number 2
| # Match either the regular expression below (attempting the next alternative only if this one fails)
[a-z] # Match a single character in the range between “a” and “z”
: # Match the character “:” literally
| # Or match regular expression number 2 below (the entire group fails if this one fails to match)
\\ # Match the character “\” literally
\\ # Match the character “\” literally
[a-z0-9_.$] # Match a single character present in the list below
# A character in the range between “a” and “z”
# A character in the range between “0” and “9”
# One of the characters “_.$”
+ # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
\\ # Match the character “\” literally
[a-z0-9_.$] # Match a single character present in the list below
# A character in the range between “a” and “z”
# A character in the range between “0” and “9”
# One of the characters “_.$”
+ # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
)? # Between zero and one times, as many times as possible, giving back as needed (greedy)
( # Match the regular expression below and capture its match into backreference number 3
\\ # Match the character “\” literally
? # Between zero and one times, as many times as possible, giving back as needed (greedy)
(?: # Match the regular expression below
[^\\/:*?""<>|\r\n] # Match a single character NOT present in the list below
# A \ character
# One of the characters “/:*?""<>|”
# A carriage return character
# A line feed character
+ # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
\\ # Match the character “\” literally
)+ # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
)
[^\\/:*?""<>|\r\n] # Match a single character NOT present in the list below
# A \ character
# One of the characters “/:*?""<>|”
# A carriage return character
# A line feed character
+ # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
)
"
Regex Tester是一个很好的网站,可以快速测试Regex。
Regex.Matches(input, "([a-zA-Z]*:[\\[a-zA-Z0-9 .]*]*)");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.