我们有以下文件格式
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!