2009-02-13 25 views
5

Tôi có một khối văn bản và đối với mỗi kết quả regex, tôi muốn thay thế kết hợp đó bằng giá trị trả lại từ một hàm khác. Tất nhiên, đối số cho hàm này là văn bản phù hợp.Python sử dụng kết quả của hàm cho Thay đổi Biểu thức Chính quy

Tôi đã gặp sự cố khi cố gắng đưa ra giải pháp vượt qua cho vấn đề này. Nó cảm thấy như nó nên được khá đơn giản.

Trả lời

14

Ngay từ the documentation:

>>> def dashrepl(matchobj): 
...  if matchobj.group(0) == '-': return ' ' 
...  else: return '-' 
>>> re.sub('-{1,2}', dashrepl, 'pro----gram-files') 
'pro--gram files' 
+0

Chết tiệt, tôi giả định rằng nó có thể là một chuỗi trong hàm đó – esiegel

0

Python-agnostic: Phù hợp với tất cả mọi thứ trước và tất cả mọi thứ sau khi văn bản của bạn để thay thế.

/^(.*?)(your regexp to match)(.*)$/ 

Sau đó, bạn có văn bản tiếp theo trước và sau văn bản bạn sẽ thay thế. Phần còn lại rất dễ dàng - chỉ cần chèn kết quả của hàm của bạn giữa hai chuỗi.

+0

OP cho biết "cho mỗi trận đấu", vì vậy bạn chỉ mô tả một nửa thuật toán. Trong mọi trường hợp, câu trả lời thích hợp đã được đưa ra và chọn. – tzot

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