这是正则表达式模式: ^\D:(\\\w.+(\\?))+$
〇理想匹配(预期):
C:\ folder1 \ folder2
C:\ folder1 \ folder2 \
✖但它也匹配(实际):
C:\ folder1 \ folder2 \ file1.txt
C:\ folder1 \ folder2 \ file2.docx
问题(以便与OP标题匹配):
我应该如何更改此正则表达式,使其包含上述文件示例中提到的文件?
OR
子问题:
您对使用Regex有什么建议吗?请参阅下面的详细信息。
详细场景:
在我的WinForms应用程序中,我有一个TextBox
,其中它的值是从配置文件中加载的。值可以是任何值-整数,字符串甚至目录。如果它看起来像目录(这就是我使用正则表达式的原因),那么我想使用System.IO.Directory.Exist()
来验证此值。
答案 0 :(得分:2)
我的猜测是,也许您正在尝试编写类似于以下内容的表达式:
^\D:(\\\w+\\\w+(\\?))$
也许不是,我不太确定。
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"^\D:(\\\w+\\\w+(\\?))$";
string input = @"C:\folder1\folder2
C:\folder1\folder2\
C:\folder1\folder2\file1.txt
C:\folder1\folder2\file2.docx
";
RegexOptions options = RegexOptions.Multiline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
如果您想探索/简化/修改表达式,可以 在右上角的面板上进行了说明 regex101.com。如果您愿意, 也可以在this link中观看它的匹配方式 针对一些样本输入。
jex.im可视化正则表达式:
答案 1 :(得分:1)
由于file1.txt
和file2.docx
都是有效的文件夹名称,因此更好的方法是进行简单的正则表达式检查:
(?i)^[A-Z]:\\
如果输入字符串与此正则表达式匹配,我们认为输入字符串是文件系统路径,然后您可以尝试/捕获System.IO.Directory.Exist()
以实际检查是否
提供的路径是现有目录。
答案 2 :(得分:0)
您的正则表达式:
^\D:(\\\w+(\\?))+$
没有文件,它将采取任何路径。
示例结果:
Accepted > D:\Folder1\Folder2
Accepted > D:\Folder1\Folder2\
Not Accepted > D:\Folder1\Folder2\text.txt
Accepted > D:\Folder1\Folder2\Folder3
Accepted > D:\Folder1\Folder2\Folder3\
并带有更多文件夹,如示例所示。
要包含文件,只需添加.*
,如下所示:
^\D:(\\\w+(\\?)).*
没有任何特定的文件夹名称,这是无效的,因为仅使用此.*
,您也会得到相同的结果。
^\D:(\\A\\).*
,其中包含第一个特定的文件夹名称以及任何文件夹名称和文件。
^\D:\\\w+\\\w+\\?\w+.\..*
带有2个文件夹,然后必须跟随文件。
切换正则表达式版本以查看其他模式,或复制粘贴正则表达式以进行测试。