C# 如何测试与特定模式/regex匹配的目录路径?

C# 如何测试与特定模式/regex匹配的目录路径?,c#,regex,nunit,C#,Regex,Nunit,我有以下测试,旨在确保生成的文件路径是特定格式的。使用Nunit流畅的界面,我该怎么做 我的正则表达式有问题 [Test] public void AssetControlPath_ShouldHaveFormat_BaseDir_YYYY_MMM_YYYYMMMDD() { //Arrange var baseDir = "C:\\BaseDir"; var fpBuilder = new FilePathBuilder(n

我有以下测试,旨在确保生成的文件路径是特定格式的。使用Nunit流畅的界面,我该怎么做

我的正则表达式有问题

  [Test]
    public void AssetControlPath_ShouldHaveFormat_BaseDir_YYYY_MMM_YYYYMMMDD() 
    {
        //Arrange
        var baseDir = "C:\\BaseDir";
        var fpBuilder = new FilePathBuilder(new DateTime(2010,10,10), baseDir );

        //Act
        var destinationPath = fpBuilder.AssetControlPath();

        //Assert
        // destinationPath = C:\BasDir\2010\Oct\20101010
    Assert.That(destinationPath, Is.StringMatching(@"C:\\BaseDir\\d{4}\\[a-zA-Z]{3}\\d{8}"));              
    }
单元测试错误
XXX.FilepathBuilderTests.AssetControl路径\u应保存格式\u BaseDir\u YYYY\u MMM\u yyyyymmmdd:
应为:字符串匹配“C:\\BaseDir\\d{4}\\[a-zA-Z]{3}\\d{8}”
但是是:“C:\BaseDir\2010\Oct\20101010”

编辑:
实际上,我已经将测试转换为使用@ChrisF的方法。但问题仍然存在。

您还有一个额外的结束方括号!!拆下它就可以了。

你有一个额外的封闭方括号!!删除它,它会很好。

一个
字符串。使用
\
作为拆分字符拆分
,然后检查元素数(5)是否正确,每个元素是否为预期值:

a) 更清楚测试的目的是什么,以及


b) 易于维护。

一个
字符串。使用
\
作为拆分字符拆分
,然后检查您是否获得了正确的元素数(5),并且每个元素都是预期值,可能是:

@"C:\\BaseDir\\d{4}\\[a-zA-Z]{3}]\\d{8}"
//                              /\ extra bracket
a) 更清楚测试的目的是什么,以及

b) 易于维护

@"C:\\BaseDir\\d{4}\\[a-zA-Z]{3}]\\d{8}"
//                              /\ extra bracket
另外,您在
\
转义方面也有问题,您需要
\\\d{4}
\\\d{8}
,您希望匹配
xxx\20101010
,而不是
xxx20101010
。以下修复程序匹配正确:

var str = @"C:\BaseDir\2010\Oct\20101010";
var re = new Regex(@"C:\\BaseDir\\\d{4}\\[a-zA-Z]{3}\\\d{8}", RegexOptions.IgnoreCase);
var result = re.IsMatch(str); // true
另外,您在
\
转义方面也有问题,您需要
\\\d{4}
\\\d{8}
,您希望匹配
xxx\20101010
,而不是
xxx20101010
。以下修复程序匹配正确:

var str = @"C:\BaseDir\2010\Oct\20101010";
var re = new Regex(@"C:\\BaseDir\\\d{4}\\[a-zA-Z]{3}\\\d{8}", RegexOptions.IgnoreCase);
var result = re.IsMatch(str); // true

顺便说一句,如果使用@符号表示字符串文字,则不需要转义反斜杠,因此@“C:\BaseDir\d{4}\[a-zA-Z]{3}]\d{8}”可能就是您所需要的。@SWeko-它在测试上面的注释中。“一开始我也错过了。”斯维科-试过这个和其他一些组合。不起作用。错误是发布的,除了
字符串匹配
部分少了一个“\`BTW,如果您使用@符号作为字符串文字,则不需要转义反斜杠,因此@“C:\BaseDir\d{4}\[a-zA-Z]{3}]\d{8}”可能是您需要的。@SWeko-它在测试上面的注释中。“一开始我也错过了。”斯维科-试过这个和其他一些组合。不起作用。错误是发布的,除了
字符串匹配
部分少了一个“\”或者在正则表达式中使用命名组并对其进行测试。或者在正则表达式中使用命名组并对其进行测试。+1。基于他提到的原因,我将坚持ChrisF的测试方法。+1真棒。基于他提到的原因,我将坚持ChrisF的测试方法。