Я хочу, чтобы заменить все один символ в моей строки с пустым. Моя идея заключается в том, что должно существовать пространство до и после одиночного символа.
Идея неправильная, слово не всегда окружено пробелами. Что делать, если слова находятся в начале строки? Или в конце? Или следует пунктуация?
Использование \b
word boundary:
Есть три различные позиции, которые квалифицируются как словоразделами:
- До первого символа в строке, если первый символ является символом слова ,
- После последнего символа в строке, если последний символ является символом слова.
- Между двумя символами в строке, где один является символом слова, а другой не является символом слова.
ПРИМЕЧАНИЕ, что в R, при использовании gsub
, то лучше использовать его с регулярным выражением PCRE (передвигайте perl=T
):
POSIX 1003,2 режим gsub
и gregexpr
не работает правильно с повторяющимися границами слов (например, pattern = "\b"
). Для таких совпадений используйте perl = TRUE
(но это может работать не так, как ожидалось, с входами, отличными от ASCII, поскольку значение слова «зависит от системы»).
Таким образом, чтобы соответствовать всем 1-буквенные слова, вы должны использовать
gsub("(?i)\\b[a-z]\\b", "REPLACEMENT", input, perl=T) ## To replace 1 ASCII letter words
Обратите внимание, что (?i)
является модификатором нечувствительны к регистру (что делает a
матч как a
и A
).
Теперь, вы должны соответствовать 2 слова письма:
gsub("(?i)\\b[a-z]{2}\\b", "REPLACEMENT", input, perl=T) ## To replace 2 ASCII letter words
Здесь мы используем limiting quantifier{min, max}
/{max}
, чтобы указать, сколько раз шаблон количественно с этой конструкцией, можно повторить.
См IDEONE demo:
> input = "I am a football fan"
> gsub("(?i)\\b[a-z]\\b", "REPLACEMENT", input, perl=T) ## To replace 1 ASCII letter words
[1] "REPLACEMENT am REPLACEMENT football fan"
gsub("(?i)\\b[a-z]{2}\\b", "REPLACEMENT", input, perl=T) ## To replace 2 ASCII letter words
[1] "I REPLACEMENT a football fan"
Я считаю, что это сработало бы для вас: 'GSUB ("[[: пространство:]] [аз] [[: пространство:]]", "", ул) '. Обратите внимание, что класс символов '[a-z]' имеет только одну скобку вокруг него. – MrFlick
@MrFlick: Это не работает. –
@MrFlick: Да С самой строкой. Он не удалил 'a'. –