2011-01-31 43 views
6

Tôi có một loạt đoạn văn mà tôi muốn phân tích bằng cách sử dụng cụm từ thông dụng, nhưng thật không may, đoạn văn này xuất hiện với nhiều khoảng trắng giữa các câu và đôi khi là các từ. Tôi muốn có thể loại bỏ tất cả không gian trắng dư thừa, nhưng tôi không chắc chắn như thế nào ... Bất cứ ai có bất kỳ ý tưởng? Tôi không muốn xóa tất cả khoảng trống, đó là điều duy nhất tôi tìm thấy cho đến nay, nhưng để giữ định dạng đoạn thông thường, như sau mỗi từ có một khoảng trắng, và sau mỗi dấu câu + từ có khoảng trắng. Tôi đang mã hóa trong Perl.Làm thế nào để loại bỏ khoảng trắng dư thừa trong chuỗi Sử dụng Regex

Mọi trợ giúp sẽ được đánh giá cao!

Trả lời

14

canonicalize khoảng trắng ngang:

s/\h+/ /g; 

canonicalize khoảng trắng dọc:

s/\v+/\n/g; 

canonicalize tất cả khoảng trắng:

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

Cảm ơn! Người cuối cùng là hoàn hảo !!! (Tôi biết, tôi vẫn không nên sử dụng regex: P) – Sheldon

4

Bạn có thể sử dụng perl đơn giản regex

s/\s+/ /g; 

FYI, các loại điều này là tốt nhất thực hiện với công cụ unix tr

tr -s ' ' 

Will bóp không gian đến một không gian duy nhất.

+2

Perl có tr /// quá: tr/\ n \ r \ f \ t// s – tadmc

+0

Điểm tốt, cảm ơn bạn đã thêm. – ocodo

1

Cả hai câu trả lời trên được đưa ra kết quả, nhưng trong cả hai trường hợp , một khoảng trống ở đầu và cuối của chuỗi.

Nếu tôi sử dụng các regex trên chuỗi "hello world", tôi nhận được câu trả lời như "hello world"

Để có được kết quả như "hello world", regex perl sau sẽ hoạt động tốt

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

Sử dụng mặt sau ở đằng sau, tất cả khoảng cách thêm đều bị xóa.

Các vấn đề liên quan