#regex
#регулярное выражение
Вопрос:
У меня есть набор строк, для которых я хотел бы заменить одинарные кавычки двойными. Но иногда заменяемая одинарная кавычка находится в конце строки, иногда одинарную кавычку следует заменить, поскольку она следует за S для притяжательного.
Пример :
Песня ‘Miss you’ включена в альбом Rolling Stones ‘Voodoo Lounge’
должно быть
Песня «Miss you» включена в альбом Rolling Stones «Voodoo Lounge»
Спасибо за вашу помощь 🙂
Комментарии:
1. На каком языке? Что вы пробовали?
2. если ваш инструмент / язык поддерживает отрицательный взгляд сзади: это грязный и быстрый способ:
(?<!s)'
3. @cappie013 Я думаю, что с ruby вы можете попробовать регулярное выражение lookbehind. Я сказал, что это грязно и быстро, потому что в некоторых случаях это приведет к сбою:
Micheal Jackson's album 'Dangerous'
Dangerous
тоже заканчивается наs
.4. Интересно, но не уверен, что это возможно. Как регулярное выражение будет указывать контекст? Что, если есть предложение типа
The song 'Blurred Lines' is featured...
Как он узнает, что ‘s’ не является притяжательным?
Ответ №1:
Регулярные выражения могут работать только с необработанным текстом. Это не может определить контекст или грамматику. Таким образом, практически невозможно создать регулярное выражение, которое будет правильно определять вхождения непереходных s
символов.
Однако, если вы хотите игнорировать такие случаи и сопоставлять их с остальными, вы можете использовать следующее регулярное выражение с утверждениями поиска:
(?<!s)'(?!sb)
Обратите внимание, что это не будет соответствовать допустимым случаям, таким как Blurred Lines
, Dangerous
и т.д.
Комментарии:
1. Это не работает с этой строкой, например: химический символ калия — ‘Pt’
2. @cappie013: Ах, я не знал, что это тоже возможно. Обновлен ответ.
3. Почти идеально, спасибо. Но, как сказал @kent, для такого рода строк, вероятно, нет решения. Альбом Майкла Джексона ‘Dangerous’ => Действительно, невозможно определить, является ли это притяжательным S или нет