Pregunta

Me gustaría eliminar todo después de un espacio en una cadena.

Por ejemplo:

"my string is sad"

debería regresar

"my"

He estado tratando de descubrir cómo hacer esto usando Sub/GSub, pero hasta ahora no he tenido éxito.

¿Fue útil?

Solución

strsplit("my string is sad"," ")[[1]][1]

Otros consejos

O sustituya todo detrás del primer espacio a la nada:

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

Y con números:

gsub('([0-9]+) .*', '\\1', c('c123123123 0320.1'))

Puedes usar una regex como

sub(" .*", "", x)

Ver el demostración de regex.

Aquí, sub solo realizará una sola operación de búsqueda y reemplazo, el .* El patrón encontrará el primer espacio (ya que el motor regex está buscando cadenas de izquierda a derecha) y .* coincide con cero o más caracteres (en el sabor de tre regex, incluso incluyendo caracteres de ruptura de línea, tenga cuidado al usar perl=TRUE, entonces no es el caso) tantos como sea posible, hasta el extremo de la cadena.

Algunas variaciones:

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

Ver el demo en línea r.

Si quieres hacerlo con una regex:

gsub('([A-z]+) .*', '\\1', 'my string is sad')
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top