开发者社区> 问答> 正文

使用UUID构建正则表达式以进行单元测试?

我有一个唯一的文件名生成器,并且正在使用REGEX模式。我想在单元测试中断言输出字符串有效:

private static final String FILE_NAME_DELIMITER = "-";
    private static final Supplier<String> getRandomUUID = () ->
            UUID.randomUUID().toString().replace(FILE_NAME_DELIMITER, "");

这就是生成UUID的方式。

这是输出字符串 filePrefix-yyyyMMdd-UUID.csv.gz

我正在寻找的正则表达式any_length_alpha_numeric_prefix-yyyyMMdd-UUID.extensionType.gz - any_length_alpha_numeric_prefix =可变长度的任何字母或数字 yyyyMMdd =此日期格式应在此位置 - UUID =从上面的代码生成的UUID - extensionType.gz =必须为.csv.gz

问题来源:Stack Overflow

展开
收起
montos 2020-03-21 21:28:58 1513 0
1 条回答
写回答
取消 提交回答
  • 您要进行匹配以测试文件名是否按预期格式设置,还是要从文件名中提取日期和UUID?

    如果只想测试文件名,则正则表达式为:

    .*-[0-9]{8}-[0-9a-f]{32}\.[^.]+\.gz
    

    新来的正则表达式?要知道,这些反斜线被正则表达式本身而不是Java编译器requried。随着nowaday IDE的,额外的反斜杠应粘贴到你的代码时自动添加。如果没有,请更换\的用\的。) 1. 匹配any_length_alpha_numeric_prefix和定界符:.*用于任意内容及其-本身。.正则表达式中的A 匹配任何东西。

    1. yyyyMMdd和定界符:[0-9]{8}-为简单起见,这里我们使用它来匹配任何8位数字,而不是严格有效的日期。对于严格的日期验证,Internet上有很多。

    2. 对于UUID和点:UUID是32个字符(0〜f十六进制数字),没有定界符。这样[0-9a-f]{32}就足够了。然后.,点被转义,因此现在它与之匹配。

    3. extensionType:我们假设它是不带点的任意序列。因此,我们[^.]+用来匹配一个或多个非点字符。csv如果已知所有文件都是csv文件,也可以将其硬编码为。

    4. 扩展名.gz:使用.gz。

    回答来源:Stack Overflow

    2020-03-21 21:30:59
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
用AI 高效测试移动应用 立即下载
移动互联网测试到质量的转变 立即下载
给ITer的技术实战进阶课-阿里CIO学院独家教材(四) 立即下载