尽管我同意之前的发言者的观点,即正则表达式不适合这项工作,但这里有一个自动生成的片段,它将与您的确切日期相匹配:
import java.util.regex.*;
class Main
{
public static void main(String[] args)
{
String txt="Wednesday, August 08, 2012 9:38:31.113 AM";
String re1="((?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday|Tues|Thur|Thurs|Sun|Mon|Tue|Wed|Thu|Fri|Sat))"; // Day Of Week 1
String re2=".*?"; // Non-greedy match on filler
String re3="((?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Sept|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?))"; // Month 1
String re4=".*?"; // Non-greedy match on filler
String re5="((?:(?:[0-2]?\\d{1})|(?:[3][01]{1})))(?![\\d])"; // Day 1
String re6=".*?"; // Non-greedy match on filler
String re7="((?:(?:[1]{1}\\d{1}\\d{1}\\d{1})|(?:[2]{1}\\d{3})))(?![\\d])"; // Year 1
String re8=".*?"; // Non-greedy match on filler
String re9="(\\d+)"; // Integer Number 1
String re10=".*?"; // Non-greedy match on filler
String re11="(\\d+)"; // Integer Number 2
String re12=".*?"; // Non-greedy match on filler
String re13="(\\d+)"; // Integer Number 3
String re14=".*?"; // Non-greedy match on filler
String re15="(\\d+)"; // Integer Number 4
String re16=".*?"; // Non-greedy match on filler
String re17="((?:[a-z][a-z]+))"; // Word 1
Pattern p = Pattern.compile(re1+re2+re3+re4+re5+re6+re7+re8+re9+re10+re11+re12+re13+re14+re15+re16+re17,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher m = p.matcher(txt);
if (m.find())
{
String dayofweek1=m.group(1);
String month1=m.group(2);
String day1=m.group(3);
String year1=m.group(4);
String int1=m.group(5);
String int2=m.group(6);
String int3=m.group(7);
String int4=m.group(8);
String word1=m.group(9);
System.out.print("("+dayofweek1.toString()+")"+"("+month1.toString()+")"+"("+day1.toString()+")"+"("+year1.toString()+")"+"("+int1.toString()+")"+"("+int2.toString()+")"+"("+int3.toString()+")"+"("+int4.toString()+")"+"("+word1.toString()+")"+"\n");
}
}
}
如果一个人无论如何都故意想要可怕的正则表达式,那么网上有一个很棒的工具:http: //txt2re.com/