我希望从 01OCT12 14:26 格式的文件或字符串中读取日期
我知道日期将是 OCT 月或 NOV 月,这可能有助于我编写更精确的正则表达式。
我已经阅读了 Java 提供的许多使用正则表达式的选项,例如 Matcher & Pattern 以及 Scanner 类,并希望能帮助我找到解决这个问题的最干净的方法。
如果您知道日期在字符串中的哪个位置,则可以使用SimpleDateFormat
for 解析而不是使用正则表达式:
DateFormat dateFormat = new SimpleDateFormat("yyMMMdd kk:mm", Locale.ENGLISH);
Date result = df.parse(stringDate);
(我假设那01
是年和12
日,但如果它颠倒了,那么你需要颠倒日期格式字符串中的yy
and 。)dd
以下是使用正则表达式的方法,并举个例子:
String example = "01OCT12 14:26";
String pattern = "^(\\d{2})(?:OCT|NOV)(\\d{2}) (\\d{1,2}):(\\d{2})$";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(example);
if (m.find())
{
//prints example
System.out.println(m.group());
System.out.println(m.group(1)); //prints 01
System.out.println(m.group(2)); //prints 12
System.out.println(m.group(3)); //prints 14
System.out.println(m.group(4)); //prints 26
}
"^(\\d{2})(?:OCT|NOV)(\\d{2}) (\\d{1,2}):(\\d{2})$"
分解:
^
手段以(...)
是一个捕获组,这意味着这...
是您要捕获的模式
\\d{2}
,这意味着任何数字中的两个[0-9]
(?:OCT|NOV)
?:
表示不捕获以下内容OCT|NOV
表示必须是 OCT 或 NOV(\\d{1,2})
是匹配 1 个或 2 个数字的捕获组[0-9]
$
手段以您可能不想使用正则表达式来完成此任务;尽管如此,我相信这就是你想要的。