java-Match шаблон регулярного выражения в строке (перечисление совпадающих и не совпадающих частей)

1

У меня есть строка csv, содержащая пять полей (3 обязательных и 2 необязательных). Необязательные поля находятся в позиции 3 и 5. У меня есть шаблон регулярного выражения для идентификации строк в двойных кавычках

    private static final String TEXT_IN_DBL_QUOTES_REGEX="\"([^\"]*)\"";
    private static final String rowData="\"Field1\", \"Field2\", , \"Field4\", ";

    public static void main(String[] args){
        List<String> fields = Lists.newArrayList();
        Pattern regex = Pattern.compile(TEXT_IN_DBL_QUOTES_REGEX);
        Matcher matcher = regex.matcher(rowData);
        while(matcher.find()){
           fields.add(matcher.group(1));
        }
        return fields;
    }

My expected result is an array list containing 
Field1, Field2, null, Field4, null
but the above is returning 
Field1, Field2, Field4

Как я могу настроить вышеуказанный код, чтобы получить желаемый результат?

  • 0
    Использование приведенного выше регулярного выражения все равно дало мне следующие «Доменное имя», «13test.com», «USer5», ==> [Domain Name, 13test.com, USer5]
  • 0
    почему бы не использовать CSV Reader, который имеет полную поддержку полей в кавычках? opencsv.sourceforge.net
Показать ещё 2 комментария
Теги:
string
match

1 ответ

0
Лучший ответ

Вы можете настроить свое регулярное выражение следующим образом:

String TEXT_IN_DBL_QUOTES_REGEX="\"([^\"]*)\"|(?<=,) *(?=,|$)";
String rowData="\"Field1\", \"Field2\", , \"Field4\", ";

List<String> fields = new ArrayList<>();
Pattern regex = Pattern.compile(TEXT_IN_DBL_QUOTES_REGEX);
Matcher matcher = regex.matcher(rowData);
while(matcher.find()) {
    fields.add(matcher.group(1));
}
System.out.println (fields);

Вывод:

[Field1, Field2, null, Field4, null]
  • 1
    Это сработало. Большое спасибо!!!
  • 0
    Пожалуйста, рад, что это сработало.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню