2011-01-31 5 views
6

정규식을 사용하여 구문 분석하려는 단락이 있지만 불행히도 단락은 문장 사이에 공백이 많이 나타나는 경우가 있습니다. 모든 초과 공백을 제거 할 수 있기를 원하지만 확실하지 않습니다 ... 누구나 아이디어가 있습니까? 모든 공백을 제거하고 싶지는 않습니다. 그러나 모든 단어 뒤에 공백이 있고 모든 구두점 + 단어 뒤에 공백이있는 것처럼 정규 단락 서식을 유지해야합니다. 나는 Perl로 코딩하고있다.Regex를 사용하여 문자열의 초과 공백을 제거하는 방법

도움이 될 것입니다.

답변

14

를 정규화 수평 공백 :

s/\h+/ /g; 

를 정규화 수직 공백 :

s/\v+/\n/g; 

를 정규화의 공백 :

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

감사합니다! 마지막 하나는 완벽합니다! (나는 아직도 정규 표현식을 사용해서는 안된다 : P) – Sheldon

4

당신은 참고

s/\s+/ /g; 

정규식 간단한 펄, 최고의 유닉스 도구 tr

tr -s ' ' 

스퀴즈 하나의 공간으로 공백으로 이루어집니다 이런 종류의 물건을 사용할 수 있습니다.

+2

Perl은 tr /// too : tr/\ n \ r \ f \ t// s – tadmc

+0

좋은 점, 추가해 주셔서 감사합니다. – ocodo

1

위의 답변은 모두하지만 두 경우 모두, 결과를주고있다 , 문자열은 문자열의 시작과 끝 부분에 있습니다.

나는 문자열 에 "Hello World", 내가 같은 대답은 "안녕하세요 세계"

같은 결과를 얻으려면 무엇입니까 "안녕하세요!", 다음 펄 정규식에서 이러한 정규 표현식을 사용하는 경우 괜찮 으면 작동합니다.

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

여기에 보이는대로를 사용하면 모든 여분의 간격이 제거됩니다.

관련 문제