Я пытаюсь найти регулярное выражение, которое не будет соответствовать разделителю, если оно завернуто в двойные кавычки. Но он также должен иметь возможность обрабатывать значения, имеющие одну двойную кавычку. У меня есть первая часть вниз ниже выражением где DELIMITER
может быть что угодно, но в основном запятые, трубы и двойные трубы:Regex для обработки некорректных файлов с разделителями
DELIMITER(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)
Это обрабатывает должным образом формируется CSV rowlike apple, "banana, and orange", grape
. Я могу разделить на ограничителе и получить значения:
['apple', 'banana, and orange', 'grape']
Моя проблема заключается в том, что я могу столкнуться с линией, как apple, "banana, and orange, grape
. В этом случае я хотел бы получить значение:
['apple', '"banana', 'and orange', 'grape']
Однако, я получаю:
['apple, "banana', 'and orange', 'grape']
Это в основном игнорирует все запятые до двойной кавычки.
Логика, которая у меня есть в голове, заключается в том, что я хочу игнорировать запятую, если ей предшествует двойная кавычка, но только если у нее есть двойная кавычка перед ней. Моя первая мысль состояла в том, чтобы поиграть с внешним видом, но я не могу заставить это работать из-за того, что взгляды не могут обрабатывать квантификаторы (исправьте меня, если это не так).
Я использую Qt QRegExp, который, как я понимаю, более или менее похож на движок регулярных выражений Perl. Пожалуйста, дайте мне знать, если есть дополнительная информация, которую я могу предоставить. Я знаю, что регулярные выражения могут быть искусно основаны на вашей настройке, и я надеюсь, что я объяснил, что я ищу достаточно хорошо!
Что бы вы ищете в случае: яблоко, «банан, апельсин, виноград,» персик, вишня, лимон "Почему не утверждать против несогласованных котировок и заставить пользователя исправить свои входы? – RegularlyScheduledProgramming
Я бы ожидал, что он вернется '['банан, апельсин, виноград,« персик, вишня, лимон »]' Я склоняюсь к простому пропуску по ряду и позволяя восходящей системе знать о плохих данных, но теперь мне просто интересно узнать, возможно ли это. Либо этот пост умрет, кто-то скажет мне, что в настоящее время это невозможно с регулярным выражением, или этот вопрос будет вызывать одно удивительное выражение! – rgrwatson85