【发布时间】:2013-11-17 02:19:29
【问题描述】:
我想解析字符串以从中获取字段。字符串的格式(来自数据集)是这样的(-> 代表一个制表符,* 代表一个空格):
Date(yyyymmdd)->Date(yyyymmdd)->*City,*State*-->Description
我只对第一次约会和状态感兴趣。我试过这样的正则表达式:
String txt="19951010 19951011 Red City, WI Description";
String re1="(\\d+)"; // Integer Number 1
String re2=".*?"; // Non-greedy match on filler
String re3="(?:[a-z][a-z]+)"; // Uninteresting: word
String re4=".*?"; // Non-greedy match on filler
String re5="(?:[a-z][a-z]+)"; // Uninteresting: word
String re6=".*?"; // Non-greedy match on filler
String re7="((?:[a-z][a-z]+))"; // Word 1
Pattern p = Pattern.compile(re1+re2+re3+re4+re5+re6+re7,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher m = p.matcher(txt);
if (m.find())
{
String int1=m.group(1);
String word1=m.group(2);
System.out.print("("+int1.toString()+")"+"("+word1.toString()+")"+"\n");
}
如果城市有两个词(红色城市),则可以正常提取状态,但如果城市只有一个词,则无法正常工作。我想不通,我不需要使用正则表达式并且愿意接受任何其他建议。谢谢。
【问题讨论】:
标签: java regex parsing mapreduce