В общем, эта проблема сложнее, чем кажется.
В простейших случаях можно обрабатывать с помощью регулярных выражений, но для более общих ситуаций вам почти наверняка потребуется построить рекурсивный синтаксический анализатор: регулярное выражение будет работать только при отсутствии вложенности.
Большая проблема будет связана с выявлением единичных "'"
s, которые не спарены - как сокращения ("'"
в "don't"
не следует менять, и следует не быть в паре).
Посмотрим, сможем ли мы написать полезное описание EBNF:
input: text+
text: uquote|squote|dquote
squote "'" text "'"
dquote """ text """
uquote: [contraction|.]+
contraction: [A-Za-z]+ "'" [A-Za-z]+
, который ограничен сокращениями, которые имеют "'"
в середине слова. Все связанные действия просто повторят ввод, за исключением того, что термины squote
и dquote
заменяют кавычки соответствующим образом.
Я использовал регулярные выражения с последующими человеческими исправлениями для довольно простой разовой работы, но это было бы трудоемко для продолжающейся работы.