在字符串上执行正则表达式可能包含正则表达式元字符?

时间:2013-08-24 16:39:37

标签: regex vb.net string

我的应用程序的一项功能包括按部分名称检查文件夹路径(文件夹名称的格式如下:“ID Name”,其中'ID'可以是任意数量的数字,'Name'可以包含任何有效的文件夹命名字符。

我只知道这些文件夹的“名称”部分,而不是他们的“ID”。 我使用它的'Name'(没有'ID')检索这些文件夹:

Dim regDirs = New Func(Of String, Boolean)(Function(i) Regex.IsMatch(i, "[\d]+[\s]" & strName, RegexOptions.Compiled Or RegexOptions.IgnoreCase))

其中'strName'是包含不带ID的名称的变量。这匹配任意数量的数字(作为ID)加上空格字符和名称。 然后我将这一行传递到:

Directory.EnumerateDirectories(dirRoot).Where(regDirs)

一切都运行得非常好,但仅适用于不包含Regex元字符的名称。

这就是我被困住的地方。我尝试将名称存储在一个变量中,其中的变量可以被另一个Regex Expression检查,然后上面的那个将转义所有元字符([\ ^ $。|?* +(){}),所以上面的表达式不会考虑它们作为特殊字符,但我不完全确定如何正确地执行此操作或是否有更简单的方法。

我知道我可以使用普通的字符串替换单独执行每个字符,如:

Dim tempName as String = strName
tempName = tempName.Replace("[", "\[")

但是我会有多条线做同样的事情,看起来不太优雅,我也不确定它是否也非常有效。

帮助赞赏〜

1 个答案:

答案 0 :(得分:0)

.NET为此提供了Regex.Escape方法:

Dim regDirs = New Func(Of String, Boolean)(Function(i) Regex.IsMatch(i, "[\d]+[\s]" & Regex.Escape(strName), RegexOptions.Compiled Or RegexOptions.IgnoreCase))