Заменить одинарные кавычки без изменения апострофа - PullRequest
1 голос
/ 17 марта 2020

У меня есть фрейм данных со столбцом Заголовок, я хочу заменить одинарные кавычки на двойные без изменения апострофа. Например, «я не go завтра работаю». Должно быть "Я не go работаю завтра".

Я пытался так:

gsub("(\\w'\\w+) |, ", "\\1", "I don't go to work tomorrow")

Я пробовал пару способов, но не получил результат как и ожидалось. Я пытаюсь str_replace_all() в stringr, но он заменяет все "в". Каждая рекомендация будет оценена.

Ответы [ 2 ]

2 голосов
/ 17 марта 2020

Шаблоны

Чтобы соответствовать апострофу только в начале / конце строки:

^'|'$

См. демонстрационное выражение регулярного выражения

Если апостоф ищется только вне слова , вы можете использовать

\b'\b(*SKIP)(*FAIL)|'

См. это демонстрационное выражение регулярного выражения . Здесь ' сопоставляется только в том случае, если оно не заключено в оба конца буквами, цифрами или подчеркиванием, поскольку все ', заключенные в символы слова, пропускаются / не выполняются.

Если вам нужно сопоставлять ' только тогда, когда оно не состоит из двух букв, используйте

'(?!(?<=[A-Za-z]')[A-Za-z])    # ASCII only
'(?!(?<=\p{L}')\p{L})          # Any Unicode letters

См. это демонстрационное выражение регулярного выражения .

Использование

gsub("^'|'$", '"', "'I don't go to work tomorrow 2'5.'")
## => "I don't go to work tomorrow 2'5." 
gsub("\\b'\\b(*SKIP)(*FAIL)|'", '"', "'I don't go to work tomorrow 2'5.'", perl=TRUE)
## => "I don't go to work tomorrow 2'5."
gsub("'(?!(?<=\\p{L}')\\p{L})", '"', "'I don't go to work tomorrow 2'5.'", perl=TRUE)
## => "I don't go to work tomorrow 2"5."

См. R демо онлайн .

2 голосов
/ 17 марта 2020

Я думаю, что ваше правило, возможно, так же просто, как: если апостроф имеет что-то (не пробел) до и после него, то не заменяйте его; в противном случае замените его.

gsub("^'|(?<= )'|'(?= )|'$", '"', "'I don't go to work tomorrow'", perl = TRUE)
# [1] "\"I don't go to work tomorrow\""

(обновлено, чтобы оно не занимало предыдущий / следующий пробел, если имеется).

...