我有一个字符串数组。现在,我必须构建一个正则表达式,它给我一个字符串,该字符串以一个字母开头,然后是\,然后是4位数字。
我尝试了以下代码。
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
string[] testStrings = new string[] { "w:\WES\1234", "w:\WES\4567", "w:\WES\856432", "w:\WES\AdK1234qw", "w:\WES\abcdesf};
string RegEx = Regex.Escape("\b\d+\w*\b");
foreach(var testString in testStrings)
{
string f = Regex.Escape(testString );
Match match = Regex.Match(f, @RegEx);
// Here we check the Match instance.
if (!match.Success)
{
continue;
}
console.writeline("teststringcorrect", match.value);
}
我希望得到答案。
“ w:\ WES \ 1234”和“ w:\ WES \ 4567”
如何更改我的正则表达式模式以找到适合我的字符串?
编辑,我的代码经过Andrew Morton建议的调整后:
string root = @"C:emp\WES"; // Outputdebug: C:emp\WES
Regex re= new Regex("^" + Regex.Escape(root) + @"\\[0-9]{4}$"); // outputdebug: re.Pattern : ^C:emp\\WES\\[0-9]{4}$
string[] subfolder = Directory.GetDirectories(root); // ouputdebug: {string[4]}. [0]:C:emp\WES\1234 [1]:C:emp\WES\5678 [3]:C:emp\WES\wqder [4]:C:emp\WES\60435632
var dirs = Directory.EnumerateDirectories(root).Where(d => re.IsMatch(d)); // outputdebug: {system.link.Enumerable.WhereEnumarableIteraTOR<STRING>} Current is Null
foreach (var folder in subfolder)
{
string f = Regex.Escape(folder);
Match match = re.Match(f); // outputdebug: groups is 0
// Here we check the Match instance.
if (!match.Success)
{
continue;
}
}
答案 0 :(得分:0)
您不得转义正在检查的字符串(testString
),因为那样可以更改它。
您可以使用@
符号使以下字符串成为文字(例如@"\r"
将被视为反斜杠和r,而不是回车符)。即使这样,正则表达式中的文字反斜杠也必须转义为\\
。
要使用Console.WriteLine()输出多个字符串,必须将它们与+
连接起来。
static void Main(string[] args)
{
string[] testStrings = new string[] { @"w:\WES\1234", @"w:\WES\4567", @"w:\WES\856432", @"w:\WES\AdK1234qw", @"w:\WES\abcdesf"};
Regex re =new Regex(@"^w:\\WES\\[0-9]{4}$");
foreach (var testString in testStrings)
{
Match match = re.Match(testString);
if (match.Success)
{
Console.WriteLine("teststringcorrect " + match.Value);
}
}
Console.ReadLine();
}
输出:
teststringcorrect w:\WES\1234
teststringcorrect w:\WES\4567
基于此,如果您有一个目录,并且想要查找名称恰好为四位数的子目录,则可以执行以下操作:
string root = @"C:\temp";
Regex re = new Regex("^" + Regex.Escape(root) + @"\\[0-9]{4}$");
var dirs = Directory.EnumerateDirectories(root).Where(d => re.IsMatch(d));
Console.WriteLine(string.Join("\r\n", dirs));
可能会输出
C:\temp\4321
C:\temp\9876