Удалить все после пробела в строке - PullRequest
7 голосов
/ 17 февраля 2012

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

Например:

"my string is sad"

должен вернуть

"my"

Я пытался выяснить, как это сделать, используя sub / gsub, но пока безуспешно.

Ответы [ 4 ]

10 голосов
/ 17 февраля 2012
strsplit("my string is sad"," ")[[1]][1]
9 голосов
/ 17 февраля 2012

или замените все, что находится за первым пробелом, на ничто:

gsub(' [A-z ]*', '' , 'my string is sad')

и с номерами:

gsub('([0-9]+) .*', '\\1', c('c123123123 0320.1'))
7 голосов
/ 13 февраля 2018

Вы можете использовать регулярное выражение, например

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 демо .

4 голосов
/ 17 февраля 2012

Если вы хотите сделать это с помощью регулярного выражения:

gsub('([A-z]+) .*', '\\1', 'my string is sad')
...