Я пытаюсь обрабатывать не совпадающие двойные кавычки внутри строки в формате CSV.
Если быть точным,
"It "does "not "make "sense", Well, "Does "it"
следует исправить как
"It" "does" "not" "make" "sense", Well, "Does" "it"
Итак, в основном я пытаюсь сделать
замените все '' '
- Не предшествует начало строки или запятая (и)
- Не следует запятая или конец строки
с ' ""
Для этого я использую следующее регулярное выражение
(?<!^|,)"(?!,|$)
Проблема заключается в том, что двигатели регулярных выражений Ruby (http://www.rubular.com/) могут анализировать регулярные выражения regex, python (https://pythex.org/, http://www.pyregex.com/), выполните следующую ошибку:
Invalid regular expression: look-behind requires fixed-width pattern
И с python 2.7.3 он бросает
sre_constants.error: look-behind requires fixed-width pattern
Может ли кто-нибудь сказать мне, что здесь python vexes?
=============================================== ===================================
EDIT:
После ответа Тима я получил следующий вывод для многострочной строки
>>> str = """ "It "does "not "make "sense", Well, "Does "it"
... "It "does "not "make "sense", Well, "Does "it"
... "It "does "not "make "sense", Well, "Does "it"
... "It "does "not "make "sense", Well, "Does "it" """
>>> re.sub(r'\b\s*"(?!,|$)', '" "', str)
' "It" "does" "not" "make" "sense", Well, "Does" "it" "\n"It" "does" "not" "make" "sense", Well, "Does" "it" "\n"It" "does" "not" "make" "sense", Well, "Does" "it" "\n"It" "does" "not" "make" "sense", Well, "Does" "it" " '
В конце каждой строки рядом с "этим" добавлены две двойные кавычки.
Итак, я сделал очень небольшое изменение в регулярном выражении, чтобы обработать новую строку.
re.sub(r'\b\s*"(?!,|$)', '" "', str,flags=re.MULTILINE)
Но это дает выход
>>> re.sub(r'\b\s*"(?!,|$)', '" "', str,flags=re.MULTILINE)
' "It" "does" "not" "make" "sense", Well, "Does" "it"\n... "It" "does" "not" "make" "sense", Well, "Does" "it"\n... "It" "does" "not" "make" "sense", Well, "Does" "it"\n... "It" "does" "not" "make" "sense", Well, "Does" "it" " '
В последнем "единственном" есть две двойные кавычки.
Но мне интересно, почему символ $$ конца строки не будет идентифицировать, что строка закончилась.
=============================================== ===================================
Последний ответ
re.sub(r'\b\s*"(?!,|[ \t]*$)', '" "', str,flags=re.MULTILINE)