【发布时间】:2013-08-24 16:39:36
【问题描述】:
我的应用程序的一个功能包括按部分名称检查文件夹路径(文件夹名称的格式如下:“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("[", "\[")
但是我会有多行做同样的事情,看起来不是很优雅,我也不确定它是否非常有效。
帮助感谢~
【问题讨论】: