Удалить все после пробела в строке
Вопрос
Я хотел бы удалить все после пробела в строке.
Например:
"my string is sad"
должен вернуться
"my"
Я пытался понять, как это сделать с помощью sub/gsub, но пока безуспешно.
Решение
strsplit("my string is sad"," ")[[1]][1]
Другие советы
Или замените все за первым пространством ни на что:
gsub(' [A-z ]*', '' , 'my string is sad')
И с числами:
gsub('([0-9]+) .*', '\\1', c('c123123123 0320.1'))
Вы можете использовать регулярное выражение, например
sub(" .*", "", x)
См. демо регулярного выражения.
Здесь, sub
выполнит только одну операцию поиска и замены, .*
шаблон найдет первый пробел (поскольку механизм регулярных выражений ищет строки слева направо) и .*
соответствует любому нулю или более символам (в варианте регулярного выражения TRE, даже включая символы разрыва строки, будьте осторожны при использовании perl=TRUE
, то это не так) как можно больше, до конца строки.
Некоторые варианты:
sub("[[:space:]].*", "", x) # \s or [[:space:]] will match more whitespace chars
sub("(*UCP)(?s)\\s.*", "", x, perl=TRUE) # PCRE Unicode-aware regex
stringr::str_replace(x, "(?s) .*", "") # (?s) will force . to match any chars
См. онлайн-демо R.
Если вы хотите сделать это с помощью корпорации:
gsub('([A-z]+) .*', '\\1', 'my string is sad')