2016-06-06 23 views
5

Sembra che dovrebbe essere semplice ma non riesco a capire quale permutazione della corrispondenza delle espressioni regolari determinerà l'estrazione dell'intera stringa dopo il il primo numero se la stringa. Posso estrarre la stringa prima del primo numero in questo modo:Mantieni la stringa dopo il primo numero

gsub("\\d.*$", "", "DitchMe5KeepMe") 

Qualsiasi idea di come scrivere il modello di espressione regolare in modo tale che la stringa dopo il primo numero viene mantenuto?

risposta

4

Invece di pigro uguale dot, mi baso su una classe di caratteri \D non cifre e utilizzare sub per fare un solo la sostituzione:

sub("^\\D*\\d", "", "DitchMe5KeepMe") 

Qui,

  • ^ - corrisponde all'inizio di una stringa
  • \D* - corrisponde a zero o più non cifre
  • \d - abbinati una cifra

NOTA: per rimuovere fino al primo numero di , aggiungere un + dopo l'ultimo \d per abbinare una o più cifre.

Vedere IDEONE demo.

4

Quello che posso vedere è che si desidera rimuovere tutto ciò che fino a quando il primo numero, in modo da poter utilizzare questo regex e sostituirlo con una stringa vuota:

^.*?\d 

Ho usato .*? per rendere il modello ungreedy, quindi se si ha DitchMe5Keep8Me abbinerà DitchMe5, se si utilizza un modello avido come .*\d sarebbe partita DitchMe5Keep8

Regex 101 Demo

R Fiddle Demo

enter image description here

+0

Vorrei rimuovere tutto prima E compreso il primo numero, ma SOLO il primo numero. Così mentre questo funziona meravigliosamente: 'gsub (". *? \\ d "," "," DitchMe5KeepMe ")', questo: 'gsub (". *? \\ d "," "," Dit5chMe5KeepMe ")' fa Non produco l'output atteso di "chMe5KeepMe" e piuttosto solo "KeepMe" – boshek

+0

@boshek, ho aggiornato la risposta. Per fare il trucco ho usato l'ancora '^' –

+0

Il trucco è usare 'sub'. C'è solo una sostituzione prevista, quindi non ha senso usare 'gsub'. Vedi la mia risposta. L'ancora è d'obbligo comunque. –

0

È inoltre possibile utilizzare str_extract da stringr:

library(stringr) 
str_extract("DitchMe5KeepMe", "(?<=\\d).*$") 
[1] "KeepMe" 

che estrarre tutto dopo la prima cifra.

str_extract("DitchMe5KeepMe6keepme", "(?<=\\d).*$") 
[1] "KeepMe6keepme" 
Problemi correlati