2013-06-17 27 views

Trả lời

4

Sử dụng ABCXYZ như neo với nhìn đằng sau và tìm kiếm-trước khẳng định:

(?<=ABC).*?(?=XYZ) 

Khẳng định (?<=...) nhìn đằng sau chỉ phù hợp tại địa điểm trong văn bản đã được đi trước bởi ABC. Tương tự, (?=XYZ) đối sánh tại vị trí theo sau là XYZ. Họ cùng nhau tạo thành hai neo giới hạn biểu thức .*, phù hợp với bất kỳ thứ gì.

Bạn có thể tìm thấy tất cả các mảnh neo như văn bản với re.findall():

for matchedtext in re.findall(r'(?<=ABC).*?(?=XYZ)', inputtext): 

Nếu ABCXYZ là biến, bạn muốn sử dụng re.escape() (để ngăn chặn bất kỳ nội dung của họ khỏi bị hiểu là cú pháp biểu thức chính quy) vào chúng và Nội suy:

re.match(r'(?<={}).*?(?={})'.format(abc, xyz), inputtext) 
+0

Cảm ơn rất nhiều @Martijin Nó hoạt động: D – sgp

2

tôi nghĩ rằng đây là những gì bạn muốn:

import re 
match = re.search('ABC(.*)XYZ','Blah blah ABC the string to be retrieved XYZ Blah Blah') 
print match.group(1) 
+1

cách tốt, nhưng thêm dấu chấm hỏi sau khi * quantifier để làm cho nó lười biếng nếu bạn không muốn để phù hợp với một cái gì đó như 'ABC (... XYZ ...) XYZ' –

+0

@ user1572508 ABC và XYZ là các biến được lấy từ người dùng – sgp

+0

điều này có thể hoạt động với Python2, không phải là 3. – Ooker

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