2010-02-21 37 views
6

Tôi có một đoạn lớn mà tôi cần phải chia thành các dòng sao cho mỗi dòng không được có nhiều hơn 100 ký tự và không có từ nào phải bị hỏng. Tôi sẽ đi đâu để tới đó? Tôi đoán với các biểu thức chính quy là cách tốt nhất nhưng tôi không chắc chắn như thế nào.Làm cách nào để bọc lại một đoạn văn cho một độ dài dòng nhất định?

+0

nếu bạn có 1 vấn đề và quyết định giải quyết nó bằng regex, giờ đây bạn có 2 vấn đề. –

+0

'$ câu hỏi [1098656] -> nhận xét [1] -> in();' (http://stackoverflow.com/questions/1098296/are-regular-expressions-worth-the-hassle/1098656) – kennytm

Trả lời

10

Sử dụng Text::Wrap.

Text::Wrap::wrap() là trình định dạng đoạn rất đơn giản. Nó định dạng một đoạn văn tại một thời điểm bằng cách phá vỡ các dòng tại các ranh giới từ. Thụt lề được kiểm soát cho dòng đầu tiên ($initial_tab) và tất cả các dòng tiếp theo ($subsequent_tab) một cách độc lập.

0

Trong khi bạn nên sử dụng một chức năng thư viện nếu bạn có một, như KennyTM đề nghị, một regex đơn giản để giải quyết việc này có thể là:

.{1,100}\b 

này sẽ mất 100 ký tự hoặc ít hơn, và sẽ không phá vỡ từ ngữ. Tuy nhiên, nó có thể phá vỡ các ký tự khác, ví dụ: dấu chấm ở cuối câu có thể được tách rời khỏi từ cuối cùng (last word<\n>. new line).
Nếu đó là một vấn đề, bạn cũng có thể thử:

.{1,99}(\s|.$) 

Đó đảm bảo ký tự cuối cùng trong mỗi trận đấu là một khoảng trắng.

Tất cả những điều này giả sử bạn tính khoảng trắng là ký tự và có thể không có dòng mới trong văn bản của bạn (một đoạn) và không có từ hơn 100 ký tự.

+0

Bạn không không muốn sử dụng \ b ở đó. Nó sẽ quấn trên những thứ như dấu nháy đơn trong không. –

+0

@Brian - chính xác. Tôi đã đề cập đến điều đó và có một giải pháp thay thế. – Kobi

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