2010-04-26 42 views
11

Khi bạn sử dụng biến (là từ đúng?) Trong các biểu thức chính quy như sau: "blah (? P \ w +)" ("value" sẽ là biến) bạn làm cho giá trị của biến là văn bản sau "blah" ở cuối dòng hoặc đến một ký tự nhất định không chú ý đến nội dung thực tế của biến. Ví dụ: đây là mã giả cho những gì tôi muốn:Biểu thức chính quy của Python gán cho các nhóm có tên

>>> import re 
>>> p = re.compile("say (?P<value>continue_until_text_after_assignment_is_recognized) endsay") 
>>> m = p.match("say Hello hi yo endsay") 
>>> m.group('value') 
'Hello hi yo' 

Lưu ý: Tiêu đề có thể không dễ hiểu. Đó là bởi vì tôi không biết phải nói thế nào. Xin lỗi nếu tôi gây ra bất kỳ sự nhầm lẫn nào.

+0

Tôi đã cố định tiêu đề của bạn một chút, nhưng tôi nghĩ nó rõ ràng từ ví dụ mã của bạn những gì bạn muốn (ít nhất, tôi hy vọng tôi đã giải thích đúng). –

+0

FYI, nội dung giữa các dấu ngoặc đơn được gọi là "nhóm". Trong ví dụ 'giá trị' của bạn là một tên. Vì vậy, bạn đang kết hợp một "nhóm được đặt tên". – Stephen

Trả lời

12

Cho rằng bạn muốn một biểu thức chính quy của

"say (?P<value>.+) endsay" 

Thời gian phù hợp với bất kỳ ký tự, và các dấu cộng chỉ ra rằng cần được lặp đi lặp lại một hoặc nhiều lần ... nên .+ nghĩa là bất kỳ chuỗi các một hoặc nhiều ký tự. Khi bạn đặt endsay ở cuối, công cụ biểu thức chính quy sẽ đảm bảo rằng mọi thứ khớp với thực tế đều kết thúc bằng chuỗi đó.

+0

Đã hoạt động hoàn hảo! Cảm ơn bạn. – None

10

Bạn cần phải xác định những gì bạn muốn để phù hợp nếu văn bản là, ví dụ,

say hello there and endsay but some more endsay 

Nếu bạn muốn kết hợp cả hello there and endsay but some more chuỗi con, @ câu trả lời của David là đúng. Nếu không, để phù hợp với chỉ hello there and, mô hình cần phải được:

say (?P<value>.+?) endsay 

với một dấu hỏi sau khi vào dấu cộng để làm cho nó không tham lam (theo mặc định nó tham lam, ngấu nghiến tất cả những gì có thể có thể trong khi cho phép đối sánh tổng thể, không tham lam có nghĩa là nó gobbles như ít càng tốt, một lần nữa trong khi cho phép khớp tổng thể).

+0

Tôi đã nghĩ về điều đó nhưng với bài nói chuyện của OP về sự phù hợp với phần cuối của dòng, có vẻ như một nhà điều hành tham lam sẽ thích hợp. Tuy nhiên, +1. –

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