我正在编写一个代码,用于从输出文件夹中获取名称为“1”,“2”,“3”,“4”等的子目录(即只有数字名称的子目录)
例如: 这是我的输出文件夹:C:\ Users \ xyz \ Desktop \ Output
我想获得名称为
的子目录“1”,“2”,“3”,“4”
输出:
C:\用户\ XYZ \桌面\输出\ A \ A1 \ 1
C:\ Users \用户XYZ \桌面\输出\ A \ A1 \ 2
C:\ Users \用户XYZ \桌面\输出\ A \ A1 \ 3
C:\ Users \用户XYZ \桌面\输出\ A \ A1 \ 4
C:\ Users \用户XYZ \桌面\输出\ A \ A2 \ 1
C:\ Users \用户XYZ \桌面\输出\ A \ A2 \ 2
在我的代码中,我尝试使用搜索模式,但无法找到所需的输出:
这是片段,它获取名称为“1”的所有子目录
string[] destDir1 = Directory.GetDirectories(
destinationFolderPath,
"1",
SearchOption.AllDirectories);
因此,为了获得名称为“1”,“2”,“3”和“4”的所有目录,我使用方括号外卡如下所示,这不起作用。
string[] destDir1 = Directory.GetDirectories(
destinationFolderPath,
"[0-9]",
SearchOption.AllDirectories);
我按照msdn link获取了搜索模式通配符的更多选项
这个逻辑有什么问题?
答案 0 :(得分:1)
使用Regex,你可以这样做:
List<string> destDir1 = Directory.GetDirectories(folderPath, "*",
SearchOption.AllDirectories)
.Where(f => Regex.IsMatch(f, @"[\\/]\d+$")).ToList();
[\/]\d+$
匹配文件夹/或\([\\/]
)后跟一个或多个(+
)数字(\d
)({{1} })。
以上代码返回$
,每个字符串的最后一部分都是一个数字,即:List<string>
,但不匹配D:\folder\1234
D:\folder\aaa111
,请使用以下代码:
D:\1\folder
它会匹配List<string> destDir1 = Directory.GetDirectories(folderPath, "*",
SearchOption.AllDirectories)
.Where(f => Regex.IsMatch(f, @"[\\/]\d+[\\/$]")).ToList();
,D:\1234\child
等文件夹,但不匹配D:\child\1234
答案 1 :(得分:1)
你应该这样做(因为GetDirectories不支持正则表达式):
<receiver android:name=".PushMessageReceiver" >
<intent-filter>
<!-- Receives the actual messages. -->
<category android:name="com.test.myAppname" />
<action android:name="com.test.client.MSGRECEIVE" />
</intent-filter>
</receiver>
答案 2 :(得分:0)
您发布的msdn链接适用于Visual Studio中的搜索模式(您在搜索代码文件时使用的模式)。
*
中除(正常DOS)?
和GetDirectories
以外的(正则表达式)搜索模式或通配符不支持。
因此,您可能需要枚举所有目录并在代码中检查它们的名称。
searchPattern可以是文字和通配符的组合,但不支持正则表达式。 searchPattern中允许使用以下通配符说明符。
...
*(星号)该位置的零个或多个字符。
? (问号)该位置的零个或一个字符。