Вы можете использовать регулярные выражения.Обычно это не рекомендуется для анализа, потому что, если у вас нет достаточно простых входных данных или входных данных, которые следуют строгим правилам, легко допустить ошибки.Вероятно, существует какой-то модуль синтаксического анализа, который справляется с этим лучше (например, модуль csv
отлично подходит для кавычек в полях и экранирования, если у вас есть CSV).
txt1 = r'"\"Hello there, my friends,\" the tour guide says." me @ swap notify.'
txt2 = '"I' + "'" + r'm a dingus who wants to put a backslash at the end of my statements. \\" me @ swap notify'
import re
print re.findall(r'"(?:[^"\\]|\\.)+"',txt1)[0]
# "\"Hello there, my friends,\" the tour guide says."
print re.findall(r'"(?:[^"\\]|\\.)+"',txt2)[0]
# "I'm a dingus who wants to put a backslash at the end of my statements. \\"
Примечание. Я использовалСинтаксис r'xxxxx'
, чтобы избежать дальнейшей экранизации для python (они уже экранированы для регулярных выражений).
Регулярное выражение "([^"\\]|\\.)+"
говорит: «сопоставить все, что не является» или обратный слеш, ИЛИ сопоставлениеобратный слеш и все, что следует за ним. "