2012-12-19 22 views
8

Mẫu (?<!(asp|php|jsp))\?.* hoạt động trong PCRE, nhưng nó không hoạt động trong Python.Python Regex Lookbehind tiêu cực

Vì vậy, tôi có thể làm gì để có được regex này hoạt động trong Python? (Python 2.7)

+6

Làm thế nào nó không hoạt động? Nó có lỗi không? Nếu có, hãy đăng lỗi. Nó không phù hợp với những gì bạn mong đợi? Nếu có, hãy đăng mã nơi bạn sử dụng và hiển thị kết quả bạn nhận được so với những gì bạn mong đợi. – BrenBarn

+0

Dưới đây là [doc] (http://docs.python.org/2/library/re.html) cho mô-đun tái, nêu rõ hỗ trợ xác nhận lookbehind tiêu cực. –

+3

Tìm kiếm tiêu cực hoạt động lại miễn là tất cả các lựa chọn thay thế có cùng độ dài. Vì vậy, điều này làm việc '(? georg

Trả lời

9

Nó hoạt động hoàn toàn tốt cho tôi. Bạn có thể sử dụng nó sai? Hãy chắc chắn để sử dụng re.search thay vì re.match:

>>> import re 
>>> s = 'somestring.asp?1=123' 
>>> re.search(r"(?<!(asp|php|jsp))\?.*", s) 
>>> s = 'somestring.xml?1=123' 
>>> re.search(r"(?<!(asp|php|jsp))\?.*", s) 
<_sre.SRE_Match object at 0x0000000002DCB098> 

Đó là chính xác cách thức mô hình của bạn nên cư xử. Như glglgl đã đề cập, bạn có thể nhận được kết quả nếu bạn chỉ định đối tượng Match đó cho một biến (giả sử m) và sau đó gọi m.group(). Điều đó mang lại ?1=123.

Nhân tiện, bạn có thể bỏ các dấu ngoặc đơn bên trong. Mẫu này tương đương:

(?<!asp|php|jsp)\?.* 
+1

... và 're.search (r" (? glglgl

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