Regex matches path in C #

I am new to 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 returns the path to a given string. The first column is a word with 1 or more characters, never empty, the second column is the path. A separator can be 1 or more spaces or one or more tabs or both.

+6
source share
3 answers

It seems to me that you just want to

 string[] bits = line.Split(new char[] { '\t', ' ' }, 2, StringSplitOptions.RemoveEmptyEntries); // TODO: Check that bits really has two entries string path = bits[1]; 

(It is assumed that the first column never contains spaces or tabs.)

EDIT: as a regex, you can simply do:

 Regex regex = new Regex(@"^[^ \t]+[ \t]+(.*)$"); 

Code example:

 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; } } 
+7
source
 StringCollection resultList = new StringCollection(); try { Regex regexObj = new Regex(@"(([az]:|\\\\[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) [az] # 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) ) " 
+4
source

Regex Tester is a good site for quick testing of Regex.

 Regex.Matches(input, "([a-zA-Z]*:[\\[a-zA-Z0-9 .]*]*)"); 
0
source

Source: https://habr.com/ru/post/899517/


All Articles