2012-10-02 19 views
5
word:12335 
anotherword:2323434 
totallydifferentword/455 
word/32 

necesito para agarrar la cadena de caracteres antes de la : o / usando sólo las funciones de base R. Puedo hacer esto usando stringr pero no quiero agregar otra dependencia a mi paquete. Las palabras pueden tener un número variable de caracteres, pero siempre terminarán en (uno de) el (los) separador (es). No necesito guardar lo que viene después.Buscar una palabra antes de que uno de los dos separadores posibles

+0

¿Los caracteres son siempre alfa a-z? ¿O pueden ser cualquier personaje? Con las preguntas de expresiones regulares, intenta proporcionar tantos detalles como sea posible. Además, ¿qué has intentado? –

+0

sí, siempre alfa aunque el caso podría ser mixto. 'WoRd'. – Maiasaura

+0

si los casos son mixtos es posible que desee '[a-zA-z]' –

Respuesta

3

quizás tratar:

x <- c("word:12335", "anotherword:2323434", "totallydifferentword/455", "word/32") 
lapply(strsplit(x, ":|/"), function(z) z[[1]]) #as a list 
sapply(strsplit(x, ":|/"), function(z) z[[1]]) #as a string 

Hay soluciones de expresiones regulares con gsub que funcionará también, pero en mi experiencia con problemas similares strsplit será menos elocuente, pero más rápido.

I supose esta expresión regular funcionaría así:

gsub("([a-z]+)([/|:])([0-9]+)", "\\1", x) 

En este caso gsub era más rápido:

Unit: microseconds 
     expr min  lq median  uq  max 
1  GSUB() 19.127 21.460 22.392 23.792 106.362 
2 STRSPLIT() 46.650 50.849 53.182 54.581 854.162 
+0

¡Gracias! No sabía que podrías utilizar una opción de separadores en 'strsplit'. Gracias Tyler! – Maiasaura

+0

Puede usar cualquier expresión de expresiones regulares. –

0

This regex seems to work. ¿Puedes usar eso en R?

+2

Es una buena idea incluir siempre el código en su respuesta, ya que no hay garantía de que el enlace que proporcionó estará disponible en el futuro. (Por supuesto, deje el enlace y tenga el código) – freefaller

+0

Es más bien un enlace kewl. Titulado "Rubular" tiene un cuadro de entrada y produce los resultados de las expresiones regulares (al menos cualquiera que sea la versión de Ruby utilizada). Nunca he visto una página similar impulsada por el motor R-regex, pero tal destino podría ser útil. (Por lo general, solo pruebo en la consola R). –

2

Algo como esto haría el truco en Ruby http://rubular.com/r/PzVQVIpKPq

^(\w+)(?:[:\/]) 

Empezando desde la parte frontal de la cuerda, agarre cualquier rasgo de palabra rs y captúrelos, hasta llegar a la captura / o :

Cuestiones relacionadas