2010-03-02 37 views

Trả lời

2

Có thể bạn nên đặt câu hỏi của mình rõ ràng hơn, giống như những gì bạn đang cố gắng làm. Điều đó nói rằng, bạn có thể slurp các tập tin vào một chuỗi toàn bộ, và phù hợp với mô hình của bạn bằng cách sử dụng lại.

import re 
data=open("file").read() 
pat=re.compile("^.*pattern.*$",re.M|re.DOTALL) 
print pat.findall(data) 

Có những cách tốt hơn để làm những gì bạn muốn, bất kể nó là gì, mà không cần phải làm lại.

+0

Bởi vì. * Là tham lam, sẽ chỉ tìm thấy một ví dụ về 'mẫu' trong một tệp. Vì bạn đã chỉ định cờ re.M, $ phù hợp ngay trước mỗi dòng mới trong tệp, vì vậy với tham lam. * Và re.DOTALL, dấu đầu tiên. * Sẽ khớp với mọi thứ trước 'mẫu' cuối cùng trong tệp và thứ hai sẽ phù hợp với mọi thứ sau 'mẫu' cuối cùng. –

+1

bất cứ điều gì. đây không phải là một giải pháp đầy đủ, vì chúng tôi không chắc chắn những gì OP thực sự muốn làm. Điều tốt nhất tôi có thể làm là nói với anh ta rằng anh ta có thể đọc toàn bộ tập tin dưới dạng chuỗi và thực hiện regex trên nó giống như các chuỗi bình thường. – ghostdog74

10

Đọc toàn bộ tệp thành chuỗi, sau đó \ A chỉ khớp với đầu chuỗi và \ Z chỉ khớp với phần cuối của chuỗi. Với re.MULTILINE, '^' khớp với phần đầu của chuỗi ngay sau dòng mới và '$' khớp với phần cuối của chuỗi ngay trước dòng mới. Xem tài liệu Python cho re syntax.

import re 

data = '''sentence one. 
sentence two. 
a bad sentence 
sentence three. 
sentence four.''' 

# find lines ending in a period 
print re.findall(r'^.*\.$',data,re.MULTILINE) 
# match if the first line ends in a period 
print re.findall(r'\A^.*\.$',data,re.MULTILINE) 
# match if the last line ends in a period. 
print re.findall(r'^.*\.$\Z',data,re.MULTILINE) 

Output:

['sentence one.', 'sentence two.', 'sentence three.', 'sentence four.'] 
['sentence one.'] 
['sentence four.'] 
Các vấn đề liên quan