Tôi đang phân tích văn bản có nhiều lần lặp lại của một mẫu đơn giản. Các văn bản có định dạng của một kịch bản cho một vở kịch, như thế này:Cụm từ thông dụng để khớp tất cả các ký tự cho đến kết quả tiếp theo
SAMPSON
I mean, an we be in choler, we'll draw.
GREGORY
Ay, while you live, draw your neck out o' the collar.
Tôi hiện đang sử dụng mô hình ([A-Z0-9\s]+)\s*\:?\s*[\r\n](.+)[\r\n]{2}
, mà hoạt động tốt (giải thích dưới đây) trừ khi bài phát biểu của nhân vật có ngắt dòng trong đó . Khi điều đó xảy ra, tên của nhân vật được chụp thành công nhưng chỉ có dòng đầu tiên của bài phát biểu được chụp.
Bật chế độ một đường (để bao gồm ngắt dòng trong .
) chỉ cần tạo một kết hợp khổng lồ.
Làm thế nào tôi có thể yêu cầu số (.+)
dừng lại khi tìm thấy tên ký tự tiếp theo và kết thúc trận đấu?
Tôi đang lặp qua từng kết hợp riêng lẻ (JavaScript), vì vậy tên phải có sẵn cho kết quả phù hợp tiếp theo.
Lý tưởng nhất, tôi có thể khớp tất cả các ký tự cho đến khi lặp lại toàn bộ mẫu.
mẫu giải thích:
Nhóm đầu tiên phù hợp với tên của một nhân vật (cho phép chữ in hoa, chữ số, và khoảng trắng), (với một dấu hai chấm trailing và khoảng trắng không bắt buộc).
Nhóm thứ hai (lời nói của nhân vật) bắt đầu trên một dòng mới và ghi lại bất kỳ ký tự nào (ngoại trừ, có sự cố, ngắt dòng và ký tự sau chúng).
Mẫu kết thúc (và bắt đầu lại) sau một dòng trống.
bạn cần phải rõ ràng xác định cách một xác định nơi tên tiếp theo bắt đầu trước khi bạn có thể lệnh e một regex để phù hợp với nó. Có bất kỳ từ đơn nào theo sau là dấu hai chấm trên một dòng không? Điều đó có dẫn đến kết quả trùng khớp không chính xác không? – mellamokb
@mellamokb Tôi quên bao gồm phần cuối của mẫu, tìm kiếm một dòng trống. Trận đấu bắt đầu tại tên của nhân vật (tất cả các mũ trên dòng riêng của nó) và kết thúc ở dòng trống sau bài phát biểu. – Nathan
Tôi tin rằng bạn đang thiếu dấu hai chấm trong văn bản mẫu của bạn, regex không hoạt động với nó. –