it-swarm-vi.tech

Làm cách nào tôi có thể viết hoa chữ cái đầu tiên của mỗi từ trong một chuỗi trong Perl?

Cách dễ nhất để viết hoa chữ cái đầu tiên trong mỗi Word của một chuỗi là gì?

25
Dan Littlejohn

Xem faq .

Tôi không tin ucfirst () thỏa mãn câu hỏi của OP để viết hoa chữ cái đầu tiên của mỗi từ trong chuỗi mà không tách chuỗi và nối nó sau.

16
piCookie

Như @brian đang đề cập trong các bình luận, câu trả lời hiện được chấp nhận bởi @piCookie là sai!

$_="what's the wrong answer?";
s/\b(\w)/\U$1/g
print; 

Điều này sẽ in "Câu trả lời sai là gì?" chú ý viết hoa chữ S sai 

FAQ nói rằng có lẽ bạn nên sử dụng tốt hơn 

s/([\w']+)/\u\L$1/g

hoặc Văn bản :: Tự động định dạng

45
Pat

Hãy xem chức năng ucfirst .

$line = join " ", map {ucfirst} split " ", $line;
10
zigdon
$capitalized = join '', map { ucfirst lc $_ } split /(\s+)/, $line;

Bằng cách chụp khoảng trắng, nó được chèn vào danh sách và được sử dụng để xây dựng lại khoảng cách ban đầu. "ucfirst lc" viết hoa "teXT" thành "Văn bản".

9
kixx
$string =~ s/(\w+)/\u$1/g;

nên làm việc tốt

6
moritz

Điều này chỉ viết hoa từ đầu tiên của mỗi dòng:

Perl -ne "print (ucfirst($1)$2)  if s/^(\w)(.*)/\1\2/" file
2
alemol

Lưu ý rằng giải pháp FAQ không hoạt động nếu bạn có các từ nằm trong tất cả các chữ hoa và bạn muốn chúng được viết hoa (chỉ) thay vào đó. Bạn có thể tạo một biểu thức chính phức tạp hơn hoặc chỉ thực hiện một lc trên chuỗi trước khi áp dụng giải pháp FAQ.

1
Karen in Wichita

Bạn có thể sử dụng ' Trường hợp tiêu đề ', đây là một đoạn mã rất hay được viết bằng Perl.

1
vsync

Hàm ucfirst trong bản đồ chắc chắn thực hiện điều này, nhưng chỉ theo một cách rất thô sơ. Nếu bạn muốn một cái gì đó tinh vi hơn một chút, hãy xem Kịch bản TitleCase của John Gruber's .

0
RET

thử đi : 

echo "what's the wrong answer?" |Perl -pe 's/^/ /; s/\s(\w+)/ \u$1/g; s/^ //'

Câu trả lời sai là gì?

0
bill god