我需要一些Java正则表达式的帮助。 我有两个文件:
file_201111.txt.gz
file_2_201111.txt.gz
我需要一个正则表达式来搜索这两个文件。
如果我使用file_[0-9]+.txt.gz
我得到第一个文件,如果我使用file_[0-9]_[0-9]+.txt.gz
我得到第二个文件。
如何组合两种搜索模式来搜索这两个文件?
谢谢
您必须使用?
指示可选单元是可选的。因为它是一个多字符单元,你应该用()
分组。试试这个:
file(_[0-9])?_[0-9]+\\.txt\\.gz
由于您尚未指定所有文件的实际格式,因此我将向您展示几个正则表达式,您可以使用最符合您需求的格式。
这匹配任意数量的_
和数字。
file[_\d]+\.txt\.gz
对于所有的仇敌,是的它将匹配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
)