Вопрос

Я хотел бы удалить все после пробела в строке.

Например:

"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')
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top