Câu hỏi Perl: chức năng để cắt chuỗi khoảng trắng đầu và cuối


Có chức năng tích hợp để cắt khoảng trống hàng đầu và đuôi như vậy trim(" hello world ") eq "hello world"?


76
2018-01-04 20:10


gốc


FYI: chuỗi bình đẳng trong Perl được kiểm tra bởi nhà điều hành eq. - A. Rex
Một chút làm rõ trên tất cả các asnwers bạn có: s/^\s+|\s+$//g; so với s/^\s*//; s/\s*$//; Cách thứ hai là cách thức thành ngữ (bao giờ hết hơi) để thực hiện điều này, khi khởi động động cơ regex thực sự nhanh hơn so với phép xen kẽ, trong trường hợp này. Bạn có thể đọc thêm về điều này trên các biểu thức chính quy của Jeffrey Friedl. (Trừ khi điều này đã được khắc phục trong một số phiên bản mới hơn của Perl, trong trường hợp đó ai đó hãy sửa tôi!) - Hugmeir
Đến từ một nền Java và .NET, tôi gần như bị sốc, điều này không được xây dựng trong ngôn ngữ! CẢM ƠN TẤT CẢ! - Landon Kuhn
@ landon9720, nó phần nào là: Scalar :: Util đã cắt, và là cốt lõi kể từ 5.7.3 - Đó là năm 2002! - Hugmeir
Hugmeir, điều này là sai, xem câu trả lời của Ether. - daxim


Các câu trả lời:


Điều này có sẵn trong Chuỗi :: Util với trim phương pháp:

Ghi chú của biên tập viên: String::Util không phải là một mô-đun lõi, nhưng bạn có thể cài đặt nó từ CPAN với [sudo] cpan String::Util.

use String::Util 'trim';
my $str = "  hello  ";
$str = trim($str);
print "string is now: '$str'\n";

bản in:

chuỗi bây giờ là 'hello'

Tuy nhiên, thật dễ dàng để tự làm:

$str =~ s/^\s+//;
$str =~ s/\s+$//;

80
2018-01-04 20:33



@ mklement0 cũng sẽ không bao giờ. Nhưng điều này không liên quan, vì mọi người nên sử dụng các mô-đun từ CPAN. - Ether
tại sao mọi người nên sử dụng các mô-đun từ CPAN? Nó làm cho tính nhất quán khó khăn khi sử dụng perl từ bản phân phối Linux của bạn (debian, redhat, ubuntu) kết hợp với các mô-đun CPAN được cài đặt thủ công. Nó là tốt hơn nếu một cái gì đó có thể được thực hiện trong perl bằng cách sử dụng các mô-đun có sẵn như là các gói trong phân phối Linux - Marki555
@ Marki555 mô-đun có sẵn dưới dạng gói trong bản phân phối Linux của bạn là từ CPAN - họ vừa được đóng gói lại. Bạn thường có thể yêu cầu một mô-đun nhất định được đóng gói nếu nó chưa được thực hiện như vậy (các nhóm debian đặc biệt đáp ứng và hữu ích). - Ether
Tôi biết họ cũng từ CPAN ... Có, nói chung tôi có thể yêu cầu một pkg mới cho debian, nhưng nó sẽ không giúp tôi cho bản phát hành ổn định debian đã cài đặt của tôi ... đó là lý do tại sao tôi thích các mô-đun gói hơn, nhưng sử dụng trực tiếp CPAN nếu thực sự cần thiết. - Marki555
@Ether Với tất cả sự tôn trọng, tôi thực sự đánh giá cao khi biết rằng đây là một mô-đun không phải cốt lõi. Bài viết này đang nói về việc sử dụng một mô-đun thay cho một regex khá đơn giản. Nếu module là cốt lõi, tôi sẽ cởi mở hơn với nó. Nó có liên quan trong trường hợp này. - UncleCarl


Dưới đây là một cách tiếp cận sử dụng cụm từ thông dụng:

$string =~ s/^\s+|\s+$//g ;     # remove both leading and trailing whitespace

Perl 6 sẽ bao gồm một chức năng cắt:

$string .= trim;

Nguồn: Wikipedia


78
2018-01-04 20:13



Tôi nhìn nó khoảng một lần mỗi tháng. Quá tệ tôi không thể upvote nó mỗi lần. - kyle


Không có tích hợp trim nhưng bạn có thể dễ dàng thực hiện của riêng mình bằng cách thay thế đơn giản:

sub trim {
    (my $s = $_[0]) =~ s/^\s+|\s+$//g;
    return $s;
}

hoặc sử dụng -sự thay thế không phá hủy trong Perl 5.14 trở lên:

sub trim {
   return $_[0] =~ s/^\s+|\s+$//rg;
}

26
2018-01-04 20:14





Theo chủ đề của perlmonk này:

$string =~ s/^\s+|\s+$//g;

9
2018-01-04 20:13





Hoàn thành howto trong perfaq tại đây: http://learn.perl.org/faq/perlfaq4.html#How-do-I-strip-blank-space-from-the-beginning-end-of-a-string-


8
2018-01-04 20:15





Tôi cũng sử dụng một lookahead tích cực để cắt không gian lặp lại bên trong văn bản:

s/^\s+|\s(?=\s)|\s+$//g

3
2017-11-12 19:03





Đối với những người đang sử dụng văn bản :: CSV tôi đã tìm thấy chuỗi này và sau đó được chú ý trong mô-đun CSV mà bạn có thể loại bỏ nó ra thông qua chuyển đổi:

$csv = Text::CSV->new({allow_whitespace => 1});

Logic là ngược lại trong đó nếu bạn muốn dải sau đó bạn thiết lập để 1. Go hình. Hy vọng điều này sẽ giúp bất cứ ai.


3
2017-12-03 16:44