我有一个输入文件,其中的行包含10列,格式如下:
String,Only Integer,Only String,Alpha Numeric,Alpha Numeric of length 7,
Alpha Numeric of length 7(with 1,3,4 as characters and 2,5,6,7 as digits),
Decimal(range from 0.4 to 0.8),Decimal,Only String,Only Integer of length 5
所有10列都在同一行中。我尝试使用regex模式只获取第7、8、9列。我在试这个正则表达式。有人能帮忙吗。
private static class RegexParser{
private static final String regex = "(.*),(^[0-9]*$),(^[a-z][A-Z]*$),"
+ "(^[a-z][A-Z][0-9]*$),(^[a-z][A-Z][0-9]{7}*$),"
+ "([a-z][0-9][a-z][a-z][-9][0-9][0-9]{7}*$),([0].[4-8]*$),"
+ "(^[0-9]+(.[0-9][0-9]?)?),(.*),(^[1-9]{5}*$)";
private static final Pattern pattern = Pattern.compile(regex);
private Matcher matcher = pattern.matcher("");
public String parse(String line) {
matcher = matcher.reset(line);
if (matcher.matches()) {
String m = matcher.group(7) + matcher.group(8) + matcher.group(9);
return m;
}
return null;
}
}
1条答案
按热度按时间ccrfmcuu1#
在regex中匹配组对于您的场景来说似乎有些过分了。使用csv解析器,或者如果值都是逗号分隔的,并且没有值包含逗号,那么像这样简单的方法可能就可以做到这一点。