2011-01-31 16 views
6

Mam serię akapitów, które chcę analizować za pomocą wyrażeń regularnych, ale niestety, akapit pojawia się z wieloma białymi przerwami między zdaniami, a czasami słowami. Chciałbym móc usunąć całą nadmiarową białą przestrzeń, ale nie jestem pewien jak ... Ktoś ma jakieś pomysły? Nie chcę usuwać wszystkich spacji, co jest jedyną rzeczą, którą znalazłem do tej pory, ale zachować regularny format akapitu, ponieważ po każdym słowie jest białe spacje i po każdej interpunkcji + słowo mają białe spacje. Koduję w Perlu.Jak usunąć nadmiarową spację w łańcuchu przy użyciu Regex

Każda pomoc zostanie doceniona!

Odpowiedz

14

canonicalize poziome odstępy:

s/\h+/ /g; 

canonicalize pionowe odstępy:

s/\v+/\n/g; 

canonicalize wszystkie spacje:

s/[\h\v]+/ /g; 
+0

Dzięki! Ten ostatni jest doskonały !!! (Wiem, nadal nie powinienem używać regex: P) – Sheldon

4

Można użyć prostego Perl regex

s/\s+/ /g; 

FYI, tego rodzaju rzeczy jest najlepiej wykonać za pomocą narzędzia uniksowego tr

tr -s ' ' 

Will wycisnąć obowiązuje do jednego miejsca.

+2

Perl ma również tr ///: tr/\ n \ r \ f \ t// s – tadmc

+0

Dobra uwaga, dziękuję za dodanie. – ocodo

1

Oba powyższe odpowiedzi są dając wynik, ale w obu przypadkach , jest tam spacja na początku i końcu łańcucha.

Jeśli użyję tych regex na ciąg "hello world", otrzymuję odpowiedź jako "hello world"

Aby uzyskać wynik jak "hello world" następujące Perl regex będzie działał bez zarzutu.

$a =~ s/(?<!\w) //g; 

Korzystanie z funkcji "tu" powoduje usunięcie wszystkich dodatkowych odstępów.

Powiązane problemy