最近在做java從預料中獲取需要信息的的方法,含多個信息,做了個簡單的基礎類。以供大家學習參考
package com;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NlpRegexTool {
private static final String _END = "##!!&&&&";
/**
* des:正則表達式匹配多個group 例:String mydata = "我要買北京到上海的機票###";//最後一個啊字補位 Pattern
* pattern = Pattern.compile("我要買(.*?)到(.*?)的(.*?)###");
*
* @param content
* @param regxStr
* @param codes
* @param groupCount
* @return
*/
public static Map<String, String> matchMultiGroup(String content,
String regxStr, List<String> codes, int groupCount) {
Map<String, String> codeGroupMap = new HashMap<String, String>();
try {
Pattern pattern = Pattern.compile(regxStr + _END);
Matcher matcher = pattern.matcher(content.trim() + _END);
if (matcher.find()) {
for (int i = 0; i < codes.size(); i++) {
String code = codes.get(i);
codeGroupMap.put(code, matcher.group(i+1));
}
}
} catch (Exception e) {
e.printStackTrace();
}
return codeGroupMap;
}
}
測試方法:
package com;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class TestRegx {
/**
* @param args
*/
public static void main(String[] args) {
testJipiao();
testTianQi();
testLu();
}
public static void testJipiao(){
String content = "我要買北京到上海的機票";
String regxStr = "我要買(.*?)到(.*?)的(.*?)";
List<String> codes = new ArrayList<String>();
codes.add("fromAddress");
codes.add("toAddress");
codes.add("what");
Map<String, String> resultMap = NlpRegexTool.matchMultiGroup(content,
regxStr, codes, 3);
for (String key : resultMap.keySet()) {
System.out.println(key + ":" + resultMap.get(key));
}
System.out.println("----------------------------------");
}
public static void testTianQi(){
String content = "北京的天氣怎麼樣";
String regxStr = "(.*?)的(.*?)怎麼樣";
List<String> codes = new ArrayList<String>();
codes.add("address");
codes.add("what");
Map<String, String> resultMap = NlpRegexTool.matchMultiGroup(content,
regxStr, codes, 3);
for (String key : resultMap.keySet()) {
System.out.println(key + ":" + resultMap.get(key));
}
}
public static void testLu(){
String content = "北京到紐約怎麼去";
String regxStr = "(.*?)到(.*?)怎麼(.*?)";
List<String> codes = new ArrayList<String>();
codes.add("fromAddress");
codes.add("toAddress");
codes.add("what");
Map<String, String> resultMap = NlpRegexTool.matchMultiGroup(content,
regxStr, codes, 3);
for (String key : resultMap.keySet()) {
System.out.println(key + ":" + resultMap.get(key));
}
}
}
上海一能信息科技出品