2009-06-06 40 views

Trả lời

25

Bạn có thể sử dụng chế độ tiết để viết biểu thức chính quy dễ đọc hơn. Ở chế độ này:

  • Khoảng trắng trong mẫu bị bỏ qua, ngoại trừ khi ở trong một lớp ký tự hoặc trước dấu gạch chéo ngược không thoát.
  • Khi dòng chứa '#' không nằm trong một lớp ký tự hoặc trước dấu gạch chéo ngược không thoát, tất cả các ký tự từ bên trái ngoài cùng '#' đến cuối dòng sẽ bị bỏ qua.

Hai câu sau đây là tương đương:

a = re.compile(r"""\d + # the integral part 
        \. # the decimal point 
        \d * # some fractional digits""", re.X) 

b = re.compile(r"\d+\.\d*") 

(Trích từ tài liệu của verbose mode)

+3

Có thể đáng để chỉ ra rằng đó là "re.X" có nghĩa là chế độ tiết tức tương đương với việc viết "re.VERBOSE". – Zitrax

2

Bạn có thể sử dụng chú thích trong của regex, mà làm cho họ nhiều hơn nữa có thể đọc được. Lấy một ví dụ từ http://gnosis.cx/publish/programming/regular_expressions.html:

/    # identify URLs within a text file 
      [^="] # do not match URLs in IMG tags like: 
       # <img src="http://mysite.com/mypic.png"> 
http|ftp|gopher # make sure we find a resource type 
      :\/\/ # ...needs to be followed by colon-slash-slash 
     [^ \n\r]+ # stuff other than space, newline, tab is in URL 
    (?=[\s\.,]) # assert: followed by whitespace/period/comma 
/
+0

... miễn là bạn biên dịch chúng bằng re.VERBOSE, theo đề xuất của Ayman. –

13

Mặc dù đề nghị @ Ayman về re.VERBOSE là một ý tưởng tốt hơn, nếu tất cả các bạn muốn là những gì bạn đang hiển thị, chỉ cần làm:

patterns = re.compile(
     r'<!--([^->]|(-+[^->])|(-?>))*-{2,}>' 
     r'\n+|\s{2}' 
) 

và nối tự động Python của các chuỗi chữ liền kề (giống như C's, btw) sẽ làm phần còn lại ;-).

+1

điều này sẽ là tự động ghép nối của Python COMBINED với sự nối kết tự động của Python giữa các dấu ngoặc và các dấu ngoặc đơn. – Triptych

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