2013-02-06 17 views
6

Jak usunąć wiele spacji i spacji za pomocą tylko 1 gsub? Zrobiłem już tę funkcję trim <- function(x) gsub(' {2,}',' ',gsub('^ *| *$','',x)), ale próbuję przepisać ją tylko z 1 gsub.Usuwanie wielu spacji i spacji za pomocą gsub

Właściwie, chcę wiedzieć, jak dopasować coś w oparciu o to, co jest przed/za pomocą gsub. W tym przykładzie muszę dopasować wszystkie przestrzenie, które są poprzedzone pojedynczym odstępem, i zastąpić je przez „”

+1

Czy możesz zmienić zdanie i wyjaśnić swoje ostatnie zdanie o dopasowywaniu wszystkich spacji poprzedzonych pojedynczym odstępem? Czy chcesz zmniejszyć liczbę spacji do jednego miejsca? – Dinre

+0

@Dinre, tak, chcę zmniejszyć wszystkie spacje do jednego. Jak widać, 1. gsub() ("na zewnątrz") dokładnie to robię, ale chcę użyć tylko 1 gsub(), i dlatego poprosiłem o sposób usunięcia wszystkich spacji poprzedzonych innym spacja (aby użyć same gsub() używane do usuwania spacji końcowych) – Rcoster

Odpowiedz

13

użytkowania pozytywny lookbehind aby sprawdzić, czy obecne miejsce jest poprzedzone spacją:

^ *|(?<=) | *$ 

Zobacz to tutaj w akcji: http://regex101.com/r/bJ1mU0

+1

+1! Uwaga w R musimy "perl = T" z takim wyrażeniem. – agstudy

+0

Dzięki Joseph i agstudy! – Rcoster

+8

Dla kompletności (edycja mojej odpowiedzi została odrzucona), oto pełna funkcja: 'przycinanie <- funkcja (x) powrót (gsub ("^* | (? <=) | * $ "," ", X, perl = T)) ' –

Powiązane problemy