2012-08-14 36 views
6

Khi tôi thay đổi hai từ trong một chuỗi với hai từ khác bằng cách sử dụng re.sub, tôi nhận được kết quả đầu ra. Nhưng khi tôi đã cố gắng rằng với số lượng không đến một cách chính xácNhiều thay thế của các số trong chuỗi bằng cách sử dụng python regex

>>> import re 
>>> a='this is the string i want to change' 
>>> re.sub('(.*)is(.*)want(.*)','\\1%s\\2%s\\3' %('was','wanted'),a) 
'this was the string i wanted to change' 
>>> re.sub('(.*)is(.*)want(.*)','\\1%s\\2%s\\3' %('was','12345'),a) 
'this was\x8a345 to change' 
>>> 

tôi không biết lý do tại sao điều này xảy ra u có thể hài lòng tel tôi làm thế nào để sử dụng này Cảm ơn trước

Trả lời

7

gì sẽ xảy ra là bạn' quay lại thay thế r'\1was\212345\3' và Python không thể xác định xem bạn có muốn số backreference 2, 21, 211, ... không. Nó chỉ chọn cái lớn nhất, 212345, rõ ràng không phải là chỉ mục nhóm trong biểu thức của bạn. Do đó, Python quyết định bạn có nghĩa là ký tự bằng chữ b'\212', đây là cách viết lạ của b'\x8a'.

Để giải quyết sự mơ hồ, sử dụng cú pháp backreference dài, \g<GROUP_NUMBER_HERE>:

>>> re.sub('(.*)is(.*)want(.*)','\\g<1>%s\\g<2>%s\\g<3>' %('was','12345'),a) 
'this was the string i 12345 to change' 
+0

Thanks a lot. Nó có vẻ tốt. – Myjab

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