@Override public Parser<String, Object> makeParser() { if (columns == null) { return new RegexParser(pattern, Optional.fromNullable(listDelimiter)); } return new RegexParser(pattern, Optional.fromNullable(listDelimiter), columns); }
public RegexParser( final String pattern, final Optional<String> listDelimiter, final Iterable<String> fieldNames ) { this(pattern, listDelimiter); setFieldNames(fieldNames); }
@Test public void testMultiValWithRegexSplit() { final String pattern = "(.*)"; final String listPattern = "[a-f]"; final Parser<String, Object> parser = new RegexParser( pattern, Optional.of(listPattern) ); String data = "1a2"; final Map<String, Object> parsed = parser.parseToMap(data); ImmutableMap.Builder builder = ImmutableMap.builder(); builder.put("column_1", Lists.newArrayList("1", "2")); Assert.assertEquals( "result", builder.build(), parsed ); }
@Override public Map<String, Object> parseToMap(String input) { try { final Matcher matcher = compiled.matcher(input); if (!matcher.matches()) { throw new ParseException("Incorrect Regex: %s . No match found.", pattern); } List<String> values = new ArrayList<>(); for (int i = 1; i <= matcher.groupCount(); i++) { values.add(matcher.group(i)); } if (fieldNames == null) { setFieldNames(ParserUtils.generateFieldNames(values.size())); } return Utils.zipMapPartial(fieldNames, Iterables.transform(values, valueFunction)); } catch (Exception e) { throw new ParseException(e, "Unable to parse row [%s]", input); } }
@Test(expected = ParseException.class) public void testFailure() { final String pattern = "AAAAA"; final List<String> fieldNames = Collections.singletonList( "dummy" ); final Parser<String, Object> parser = new RegexParser( pattern, Optional.of("@"), fieldNames ); String data = "BBBB"; parser.parseToMap(data); } }
public RegexParser( final String pattern, final Optional<String> listDelimiter, final Iterable<String> fieldNames ) { this(pattern, listDelimiter); setFieldNames(fieldNames); }
@Test public void testMultiVal() { final String pattern = "^([0-9a-f]+) (.*)"; final List<String> fieldNames = Arrays.asList( "Bucket Owner", "Bucket" ); final Parser<String, Object> parser = new RegexParser( pattern, Optional.of("@"), fieldNames ); String data = "79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be mybucket@mybucket2"; final Map<String, Object> parsed = parser.parseToMap(data); ImmutableMap.Builder builder = ImmutableMap.builder(); builder.put("Bucket Owner", "79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be"); builder.put("Bucket", Lists.newArrayList("mybucket", "mybucket2")); Assert.assertEquals( "result", builder.build(), parsed ); }
@Override public Map<String, Object> parseToMap(String input) { try { final Matcher matcher = compiled.matcher(input); if (!matcher.matches()) { throw new ParseException("Incorrect Regex: %s . No match found.", pattern); } List<String> values = Lists.newArrayList(); for (int i = 1; i <= matcher.groupCount(); i++) { values.add(matcher.group(i)); } if (fieldNames == null) { setFieldNames(ParserUtils.generateFieldNames(values.size())); } return Utils.zipMapPartial(fieldNames, Iterables.transform(values, valueFunction)); } catch (Exception e) { throw new ParseException(e, "Unable to parse row [%s]", input); } }
); final Parser<String, Object> parser = new RegexParser( pattern, Optional.absent(),
); final Parser<String, Object> parser = new RegexParser( pattern, Optional.absent(),
@Override public Parser<String, Object> makeParser() { if (columns == null) { return new RegexParser(pattern, Optional.fromNullable(listDelimiter)); } return new RegexParser(pattern, Optional.fromNullable(listDelimiter), columns); }