我正在尝试获取与模式匹配的给定路径中的所有文件夹。我需要的模式是H
,其数字可以从1
转到9
。
这是我尝试创建正则表达式的方法,但它因“非法模式”异常而崩溃:
Regex searchPattern = new Regex(@"(H\d +)\");
这就是我获取文件夹(路径)的方式:
List<string> folders = Directory.GetDirectories(path).Where(p => searchPattern.IsMatch(path)).ToList();
如何创建一个与字母H
匹配的正确正则表达式?
答案 0 :(得分:1)
您能提供示例输入吗?如果我运行这个:
var path = "H3";
var match = Regex.Match(path, "H[1-9]").Success;
if (match)
{
Console.WriteLine("Match found!");
Console.ReadKey();
}
我得到了#34;找到匹配!&#34;在控制台。虽然,我不知道你的确切输入是什么。我的答案完全基于:&#34;我需要的模式是一个H,数字可以从1到9。&#34;。
答案 1 :(得分:1)
我尝试创建正则表达式但它崩溃(非法模式)
您遇到的问题是由模式末尾的文字\
引起的。反斜杠是正则表达式模式中的转义符号,必须跟随一些char。
与H
匹配的模式为H
,与1
到9
的数字匹配的模式为[1-9]
(正字符类)。所以,将其声明为
var searchPattern = new Regex(@"H[1-9]");
然后,如果在lambda部分中将变量声明为p
,请使用p
而不是path
(您要搜索子文件夹的原始目录)。
答案 2 :(得分:0)
以下代码应符合您的需求。 请注意您的Lambda使用路径而不是 p 参数。
string path = "C:/my-path";
Regex searchPattern = new Regex(@"H\d");
List<string> folders = Directory.GetDirectories(path).Where(p => searchPattern.IsMatch(p)).ToList();