C# · 12月 22, 2021

c# – 一种使用RegEx在字符串中查找一组文件名路径的方法

早上好家伙

有没有一种在C#中使用正则表达式的好方法,以便在字符串变量中查找所有文件名及其路径?

例如,如果您有此字符串:

string s = @”Hello Johnthese are the files you have to send us today: <file>C:\Development\Projects 2010\Accounting\file20101130.csv</file>,<file>C:\Development\Projects 2010\Accounting\orders20101130.docx</file>also we would like you to send <file>C:\Development\Projects 2010\Accounting\customersupdated.xls</file>thank you”;

结果将是:

C:\Development\Projects 2010\Accounting\file20101130.csvC:\Development\Projects 2010\Accounting\orders20101130.docxC:\Development\Projects 2010\Accounting\customersupdated.xls

编辑:
考虑到@Jim的内容,我编辑了字符串添加标签,以便更容易从字符串中提取所需的文件名!

解决方法 这是我想出来的: using System;using System.Text.RegularExpressions;public class Test{ public static void Main() { string s = @”Hello John these are the files you have to send us today: C:\projects\orders20101130.docx also we would like you to send C:\some\file.txt,C:\someother.file and d:\some file\with spaces.ext Thank you”; Extract(s); } private static readonly Regex rx = new Regex (@”[a-z]:\\(?:[^\\:]+\\)*((?:[^:\\]+)\.\w+)”,RegexOptions.IgnoreCase); static void Extract(string text) { MatchCollection matches = rx.Matches(text); foreach (Match match in matches) { Console.WriteLine(“‘{0}'”,match.Value); } }}

产品:(见ideone)

‘C:\projects\orders20101130.docx’,file: ‘orders20101130.docx”C:\some\file.txt’,file: ‘file.txt”C:\someother.file’,file: ‘someother.file”d:\some file\with spaces.ext’,file: ‘with spaces.ext’

正则表达式不是非常强大(它确实做了一些假设)但它也适用于您的示例.

如果您使用< file>,这是该程序的一个版本标签.将正则表达式和Extract更改为:

private static readonly Regex rx = new Regex (@”<file>(.+?)</file>”,RegexOptions.IgnoreCase);static void Extract(string text){ MatchCollection matches = rx.Matches(text); foreach (Match match in matches) { Console.WriteLine(“‘{0}'”,match.Groups[1]); }}

也可在ideone上获得.