Tôi đã đọc tất cả các bài viết có liên quan và cọ rửa internet nhưng điều này thực sự đánh tôi.Làm thế nào để làm cho vẻ ngoài tiêu cực của Python ít tham lam hơn?
Tôi có một số văn bản chứa ngày.
Tôi muốn ghi lại ngày tháng, nhưng không phải là ngày bắt đầu bằng một cụm từ nhất định.
Một giải pháp đơn giản là thêm một giao diện tiêu cực vào RegEx của tôi.
Dưới đây là một số ví dụ (sử dụng findall).
Tôi chỉ muốn chụp ngày nếu nó không đứng trước cụm từ "tính đến".
19-2-11
một cái gì đó một cái gì đó 15-4-11
như vậy và như của 29-5-11
Đây là biểu hiện thường xuyên của tôi:
(?<!as of)(\d{1,2}-\d{1,2}-\d{2})
Kết quả mong đợi:
['19 -2-11 ']
['15 -4-11']
[]
Kết quả thực tế:
['19 -2-11' ]
['15 -4-11 ']
[' 9-5-11' ]
Thông báo đó là 9 không 29. Nếu tôi thay đổi \d{1,2}
một cái gì đó vững chắc như \d{2}
trên mô hình đầu tiên :
bad regex for testing: (?<!as of)(\d{2}-\d{1,2}-\d{2})
Sau đó tôi nhận được kết quả mong đợi. Tất nhiên điều này là không tốt bởi vì tôi muốn phù hợp với 2 chữ số ngày cũng như ngày một chữ số.
Dường như ngoại hình tiêu cực của tôi là tham lam quity - moreso hơn chụp ngày của tôi, vì vậy nó ăn cắp một chữ số từ nó và thất bại. Tôi đã thử mọi cách điều chỉnh tham lam mà tôi có thể nghĩ đến, nhưng tôi không biết sửa lỗi này.
Tôi muốn chụp ngày tháng của mình để phù hợp với tham lam tối đa, và sau đó giao diện tiêu cực của tôi được áp dụng. Điều này có thể không? Vấn đề của tôi có vẻ giống như một cách sử dụng tốt các ngoại hình tiêu cực và không quá phức tạp. Tôi chắc rằng tôi có thể thực hiện nó theo một cách khác nếu tôi phải nhưng tôi muốn học cách làm điều này.
Làm cách nào để làm cho giao diện phủ định của Python ít tham lam hơn?
Điều này thật tuyệt vời, tôi tìm thấy '(?:^| \ S +)' và lời giải thích của bạn rất rõ ràng. Tôi cảm thấy câu hỏi của tôi được trả lời.:) Hoàn toàn vì lợi ích của kiến thức và không cần thiết tôi muốn tìm hiểu làm thế nào để sửa đổi này để '\ s' là tùy chọn, chẳng hạn như' something something15-4-11' sẽ phù hợp, nhưng tôi có thể nó ra bản thân mình. Cảm ơn bạn! –
@ChristopherGalpin Tôi nghĩ rằng nó có thể đạt được rất dễ dàng bằng cách sử dụng '*' (từ 0 đến vô cùng xuất hiện) thay vì '+' (từ 1 đến vô cực) trong phần này của mẫu: '(?:^| \ S +) ' – ovgolovin
Tôi đã hy vọng nó rất dễ dàng nhưng rõ ràng là không, phá vỡ' như của 'trận đấu trong cùng một cách như câu hỏi ban đầu. –