Java Regex搜索两个文件名

时间:2017-12-20 19:37:24

标签: java regex

我需要一些Java正则表达式的帮助。
我有两个文件:

file_201111.txt.gz
file_2_201111.txt.gz

我需要一个正则表达式来搜索这两个文件。

如果我使用file_[0-9]+.txt.gz,如果我使用file_[0-9]_[0-9]+.txt.gz,我会收到第一个文件。我会收到第二个文件。

如何将两种搜索模式结合起来搜索这两个文件?

由于

2 个答案:

答案 0 :(得分:3)

由于您尚未指定所有文件的实际格式,因此我将向您展示几个正则表达式,您可以使用符合您需要的最佳格式。

代码

方法1

这匹配任意数量的_和数字。

See regex in use here

file[_\d]+\.txt\.gz

对于所有 haters ,是的,它会与file_.txt.gz匹配,因此要防止您使用file(?:_\d+)+\.txt\.gz

方法2

匹配_number模式中的一个或两个,number表示任意数字(1位数)。

See regex in use here:以下两种模式都可以达到同样的效果。

file(?:_\d+){1,2}\.txt\.gz
file_\d+(?:_\d+)?\.txt\.gz

说明

方法1

  • file按字面意思匹配
  • [_\d]+匹配集合中的一个或多个字符(_或数字)
  • \.txt\.gz按字面意思匹配(请注意\.匹配字面字符.

方法2

  • file按字面意思匹配
  • (?:_\d+){1,2}匹配_\d+(下划线后跟一个或多个数字)一次或两次
    • 请注意,第二个选项_\d+(?:_\d+)?基本相同。
  • \.txt\.gz按字面意思匹配(请注意\.与精简点字符匹配.

答案 1 :(得分:2)

您必须指明可选单位是?的可选单位。由于它是一个多字符单元,因此您应该将其与()分组。试试这个:

file(_[0-9])?_[0-9]+\\.txt\\.gz