我需要Java Regex的帮助。我有一个文件名字符串,可以有以下格式之一:
数yyyymmdd.text_1.xml
OR
yyyymmdd.text_1.xml
我能够得到< number>和< yyyymmdd>从第一种格式使用下面的正则表达式:
"\\-(.*?)\\."
- 给我yyyymmdd
"(.*?)\\-";
- 给我编号
但是使用第二种格式(即使用< yyyymmdd> .text_1.xml),它会抛出错误并且不会返回< yyyymmdd>。我需要一个适用于两种字符串的日期格式的正则表达式。
你能帮忙吗?
答案 0 :(得分:2)
此正则表达式为format-1提供了数字和日期,并为format-2提供了空字符串和日期
public static void main(String[] args) {
String s1 = "number-20150606.text_1.xml";
String s2 = "20150606.text_1.xml";
Pattern p =Pattern.compile("(.*?)-?(\\d{8})");
Matcher m = p.matcher(s1);
while(m.find()) {
System.out.println(m.group(1));
System.out.println(m.group(2));
}
m = p.matcher(s2);
while(m.find()) {
System.out.println(m.group(1));
System.out.println(m.group(2));
}
}
O / P:
number
20150606
// Empty String here.
20150606