我有一个唯一的文件名生成器,并且正在使用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
您要进行匹配以测试文件名是否按预期格式设置,还是要从文件名中提取日期和UUID?
如果只想测试文件名,则正则表达式为:
.*-[0-9]{8}-[0-9a-f]{32}\.[^.]+\.gz
新来的正则表达式?要知道,这些反斜线被正则表达式本身而不是Java编译器requried。随着nowaday IDE的,额外的反斜杠应粘贴到你的代码时自动添加。如果没有,请更换\的用\的。) 1. 匹配any_length_alpha_numeric_prefix和定界符:.*用于任意内容及其-本身。.正则表达式中的A 匹配任何东西。
yyyyMMdd和定界符:[0-9]{8}-为简单起见,这里我们使用它来匹配任何8位数字,而不是严格有效的日期。对于严格的日期验证,Internet上有很多。
对于UUID和点:UUID是32个字符(0〜f十六进制数字),没有定界符。这样[0-9a-f]{32}就足够了。然后.,点被转义,因此现在它与之匹配。
extensionType:我们假设它是不带点的任意序列。因此,我们[^.]+用来匹配一个或多个非点字符。csv如果已知所有文件都是csv文件,也可以将其硬编码为。
扩展名.gz:使用.gz。
回答来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。