如何使用字母和数字为搜索模式创建正则表达式?

时间:2017-03-13 14:24:22

标签: c# regex

我正在尝试获取与模式匹配的给定路径中的所有文件夹。我需要的模式是H,其数字可以从1转到9

这是我尝试创建正则表达式的方法,但它因“非法模式”异常而崩溃:

Regex searchPattern = new Regex(@"(H\d +)\");

这就是我获取文件夹(路径)的方式:

List<string> folders = Directory.GetDirectories(path).Where(p => searchPattern.IsMatch(path)).ToList();

如何创建一个与字母H匹配的正确正则表达式?

3 个答案:

答案 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,与19的数字匹配的模式为[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();