基于正则表达式的简历解析工具
package fun.pkg; import java.util.regex.Matcher; import java.util.regex.Pattern; public class AnalysisResume { public static void main(String[] args) { System.out.println(t("1965-1979年 地球防卫军副主席,地球防卫军远东战区副总司令、远东战区指挥员")); System.out.println(t("1965年5月,王五出生于东华省武阳市的一个普通知识分子家庭,父母毕业于武阳理工大学从事水利、水电的地质勘测工作。")); System.out.println(t("1965年7月生于中国长恒省,祖籍东华省,远东外国语大学毕业。")); System.out.println(t("1966-1966年 空军第一航空预备学校学员")); System.out.println(t("1966-1967年 地球防卫军先锋军第三师三十五团当兵锻炼")); System.out.println(t("1966年2月26日,张三出生于富江省安屯市兰溪县(今豫东市)。")); System.out.println(t("1966年3月,出生于北川省湖中市怀阳区明阳镇。")); System.out.println(t("1966年,“第二次降临”中受冲击;")); System.out.println(t("1966年夏在弘阳初中毕业, 恰逢“二降”爆发;")); System.out.println(t("1967-1968年 空军第八航空学校学员")); System.out.println(t("1967年3月-1971年1月任苏溪省桓阳武东服装厂职工;")); System.out.println(t("1967年3月,李四出生于富江省临安市,原籍江北千荣。")); System.out.println(t("1967年--1979.12 ? 远东战区黑木建筑队木匠")); System.out.println(t("2006.12--2012.03,湖东省南岛战区指挥员、南岛市常务副市长(2006.12.29任命,2008.01.10当选)、市政府党组副书记;")); System.out.println(t("1999年08月—2003年07月,苏溪省建筑工程总公司(建设集团公司)副总经理(其间:2001年09月—2002年12月苏溪省军校军事指挥专业在职研究生学习);")); } public static Result t(String s) { // 两个时间的 Pattern pattern2year = Pattern.compile("((19|20)\\d\\d)(.+?)((19|20)\\d\\d)(.+)"); Matcher matcher2year = pattern2year.matcher(s); // 只有一个时间的 Pattern pattern1year = Pattern.compile("((19|20)\\d\\d)(.+)"); Matcher matcher1year = pattern1year.matcher(s); // 月份匹配 Pattern patternMonth = Pattern.compile("(\\d+)(.+)"); Result result = new Result(); if (matcher2year.find()) { // 匹配出两个年份 String year1 = matcher2year.group(1); String content1 = matcher2year.group(3); String year2 = matcher2year.group(4); String content2 = matcher2year.group(6); // 根据年份分段结果匹配月份 Matcher matcherMonth1 = patternMonth.matcher(content1); Matcher matcherMonth2 = patternMonth.matcher(content2); if (matcherMonth1.find()) { result.setMonth1(matcherMonth1.group(1)); } if (matcherMonth2.find()) { result.setMonth2(matcherMonth2.group(1)); result.setContent(handle(matcherMonth2.group(2))); } else { result.setContent(handle(content2)); } result.setYear1(year1); result.setYear2(year2); } else if (matcher1year.find()) { String year1 = matcher1year.group(1); String content1 = matcher1year.group(3); Matcher matcherMonth1 = patternMonth.matcher(content1); if (matcherMonth1.find()) { result.setMonth1(matcherMonth1.group(1)); result.setContent(handle(matcherMonth1.group(2))); } else { result.setContent(handle(content1)); } result.setYear1(year1); } else { System.out.println("没匹配到"); } return result; } public static String handle(String s) { if (s.startsWith("年") || s.startsWith("月")) { s = s.substring(1).trim(); } Pattern pattern = Pattern.compile("^(\\d+)(.+)"); Matcher matcher = pattern.matcher(s); if (matcher.find()) { s = matcher.group(2); } if (s.startsWith("日")) { s = s.substring(1).trim(); } if (s.startsWith(",") || s.startsWith(" ")) { s = s.substring(1).trim(); } return s; } static class Result { private String year1; private String month1; private String year2; private String month2; private String content; public String getYear1() { return year1; } public void setYear1(String year1) { this.year1 = year1; } public String getMonth1() { return month1; } public void setMonth1(String month1) { this.month1 = month1; } public String getYear2() { return year2; } public void setYear2(String year2) { this.year2 = year2; } public String getMonth2() { return month2; } public void setMonth2(String month2) { this.month2 = month2; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } @Override public String toString() { return "Result{" + "year1='" + year1 + '\'' + ", month1='" + month1 + '\'' + ", year2='" + year2 + '\'' + ", month2='" + month2 + '\'' + ", content='" + content + '\'' + '}'; } } }