java - 处理两个不同文件扩展名的正则表达式
问题描述
我正在尝试创建一个正则表达式,它采用名称为“abcd_04-04-2020.txt”或“abcd_04-04-2020.txt.gz”的文件
如何处理扩展的“OR”条件。这是我到目前为止所拥有的
if(fileName.matches("([\\w._-]+[0-9]{2}-[0-9]{2}-[0-9]{4}.[a-zA-Z]{3})")){
Pattern.compile("[._]+[0-9]{2}-[0-9]{2}-[0-9]{4}\\.");
}
这仅处理 .txt。我该如何处理“.txt.gz”谢谢
解决方案
您可以使用以下正则表达式来实现您的目的:
^[\w-]+\d{2}-\d{2}-\d{4}\.txt(?:\.gz)?$
上述正则表达式的解释: ]
^,$
- 匹配测试字符串的开始和结束。
[\w-]+
- 匹配单词字符和连字符一次或多次。
\d{}
- 匹配花括号中提到的尽可能多的数字。
(?:\.gz)?
.gz
- 表示匹配零次或一次的非捕获组,因为?量词。您可以使用|
交替(或您所期望的OR),但这也更清晰且更有效。
您可以在此处找到上述正则表达式的演示。
在 Java 中的实现:
import java.util.regex.*;
public class Main
{
private static final Pattern pattern = Pattern.compile("^[\\w-]+\\d{2}-\\d{2}-\\d{4}\\.txt(?:\\.gz)?$", Pattern.MULTILINE);
public static void main(String[] args) {
String testString = "abcd_04-04-2020.txt\nabcd_04-04-2020.txt.gz\nsomethibsnfkns_05-06-2020.txt\n.txt.gz";
Matcher matcher = pattern.matcher(testString);
while(matcher.find()){
System.out.println(matcher.group(0));
}
}
}
你可以在这里找到上述正则表达式在 java 中的实现。
注意:如果您还想匹配有效日期;请访问此。
推荐阅读
- c# - 在 WPF 应用程序中使用 ComboBox 时出现错误“使用 ItemsSource 之前项目集合必须为空”
- java - 使用快速排序算法的 Arraylist 的第 K 个最小元素
- http - 从 http 重定向到 https 在 .htaccess 中不起作用
- java - 出现错误“无法找到 cfg.xml 资源 [hibernate.cfg.xml]”
- c# - 在 C# 中不允许请求的注册表访问
- javascript - 滑块中的图像重复
- java - 如何在 Android Studio 中正确使用 database.raw 查询?
- token - 如何在万事达卡网关支付(mpgs)中使用托管结账方式进行标记化
- android - RecyclerView.Adapter StateRestorationPolicy 是如何工作的?
- excel - 数据归一化范围和规模