Regex只解析15分钟的文件,跳过60分钟的文件



我们有以下文件格式

60min-->
A20210217.0300-0000-0400-0000_GBM053.xml.gz
15min -->
A20210217.0300-0000-0315-0000_GBM053.xml.gz ,A20210217.0315-0000-0330-0000_GBM053.xml.gz, A20210217.0330-0000-0345-0000_GBM053.xml.gz , A20210217.0345-0000-0400-0000_GBM053.xml.gz

尝试使用下面的正则表达式,但不工作

!(^A[0-9]{8}.[0-9]{2}[0]{2}-[0-9]{4}-[0-9]{2}[0]{2}-[0-9]{4}_.*.xml(|.gz)$)

模式开头的!匹配!这在示例数据中是不存在的。如果它的意思是作为分隔符,它也应该在末尾。

您可以使第二部分匹配15、30或45,并在连字符字符串的第一部分或第三部分中使用这些值的替换。

^Ad{8}.(?:dd(?:[14]5|30)(?:-d{4}){3}|d{4}-d{4}-dd(?:[14]5|30)-d{4})_.*.xml.gz$

模式匹配

  • ^字符串
  • 起始
  • Ad{8}.匹配A和后跟.的8位数字
  • (?:非捕获组,用于匹配更改
    • dd(?:[14]5|30)匹配2位数字和15或45或30
    • (?:-d{4}){3}匹配3次-和4位数字
    • |
    • d{4}-d{4}--匹配2次4位数
    • dd(?:[14]5|30)-d{4}匹配2位数字和15或45或30后面跟着4位数字
  • )关闭非捕获组
  • _.*.xml.gz匹配_, 0+倍的任何字符,除了换行符和.xml.gz
  • $字符串结束

Regex演示

https://regex101.com/r/KqB81T/2

^Ad{8}.(d{2}(?:[14]5|30)-0000-d{4}-0000|d{4}-0000-d{2}(?:[14]5|30)-0000)_.*.xml(|.gz)$

分解结构:

  • 前两个条目匹配:d{2}(?:[14]5|30)-0000-d{4}-0000
  • 最后两个条目匹配:d{4}-0000-d{2}(?:[14]5|30)-0000

添加匹配(两个SET匹配的UNION):(FIRST_MATCH|SECOND_MATCH)。还要确保在末尾(在gz$之间)没有任何字符/空格

让我第一个说:欢迎来到SO, Muskan Garg Bansal!

最新更新