我需要一些Java正则表达式的帮助。
我有两个文件:
file_201111.txt.gz
file_2_201111.txt.gz
我需要一个正则表达式来搜索这两个文件。
如果我使用file_[0-9]+.txt.gz
,如果我使用file_[0-9]_[0-9]+.txt.gz
,我会收到第一个文件。我会收到第二个文件。
如何将两种搜索模式结合起来搜索这两个文件?
由于
答案 0 :(得分:3)
由于您尚未指定所有文件的实际格式,因此我将向您展示几个正则表达式,您可以使用符合您需要的最佳格式。
这匹配任意数量的_
和数字。
file[_\d]+\.txt\.gz
对于所有 haters ,是的,它会与file_.txt.gz
匹配,因此要防止您使用file(?:_\d+)+\.txt\.gz
。
匹配_number
模式中的一个或两个,number
表示任意数字(1位数)。
See regex in use here:以下两种模式都可以达到同样的效果。
file(?:_\d+){1,2}\.txt\.gz
file_\d+(?:_\d+)?\.txt\.gz
file
按字面意思匹配[_\d]+
匹配集合中的一个或多个字符(_
或数字)\.txt\.gz
按字面意思匹配(请注意\.
匹配字面字符.
)file
按字面意思匹配(?:_\d+){1,2}
匹配_\d+
(下划线后跟一个或多个数字)一次或两次
_\d+(?:_\d+)?
基本相同。\.txt\.gz
按字面意思匹配(请注意\.
与精简点字符匹配.
)答案 1 :(得分:2)
您必须指明可选单位是?
的可选单位。由于它是一个多字符单元,因此您应该将其与()
分组。试试这个:
file(_[0-9])?_[0-9]+\\.txt\\.gz