我的应用程序的一个功能包括按部分名称检查文件夹路径(文件夹名称的格式如下:“ID 名称”,其中“ID”可以是任意数量的数字,“名称”可以包含任何有效的文件夹命名字符。
我只知道这些文件夹的“名称”部分,而不知道它们的“ID”。我使用以下方法通过它们的“名称”(没有“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)
一切都很好,但仅适用于不包含正则表达式元字符的名称。
这就是我卡住的地方。我尝试将名称存储在一个变量中,该变量可以由另一个正则表达式在上述表达式之前检查,这将转义所有元字符 ([\^$.|?*+(){}) 所以上面的表达式不会考虑它们是特殊字符,但我不完全确定如何正确执行此操作,或者是否有更简单的方法来执行此操作。
我知道我可以使用普通的字符串替换来单独处理每个字符,例如:
Dim tempName as String = strName
tempName = tempName.Replace("[", "\[")
但是我会有多行做同样的事情,看起来不是很优雅,我也不确定它是否非常有效。
帮助赞赏~