Ví dụ: tôi có văn bản có nhiều kích thước sản phẩm như "2x4" mà tôi muốn chuyển đổi thành "2 xby 4".Cách thay thế tất cả các lần xuất hiện của regex như thể áp dụng thay thế liên tục
pattern = r"([0-9])\s*[xX\*]\s*([0-9])"
re.sub(pattern, r"\1 xby \2", "2x4")
'2 xby 4' # good
re.sub(pattern, r"\1 xby \2", "2x4x12")
'2 xby 4x12' # not good. need this to be '2 xby 4 xby 12'
Một cách để mô tả những gì tôi muốn làm là lặp lại thay thế cho đến khi không thể thay thế thêm. Ví dụ, tôi có thể chỉ đơn giản là để thay thế trên hai lần để có được những gì tôi muốn
x = re.sub(pattern, r"\1 xby \2", "2x4x12")
x = re.sub(pattern, r"\1 xby \2", x)
'2 xby 4 xby 12'
Nhưng tôi giả sử có một cách tốt hơn
Tôi nghĩ rằng tôi thích điều này tốt hơn mặc dù tôi nghĩ rằng tôi đã có câu trả lời. Lookahead sẽ nhận được nó kể từ khi thay thế được thực hiện trái sang phải. – NickT
Cảm ơn. Bạn có thể giải thích một cách lỏng lẻo về việc này đang làm gì không? Có vẻ như đúng, nhưng tôi không hoàn toàn hiểu tại sao. – Ben
Tôi đã thêm một lời giải thích về lookahead trong câu trả lời. – anubhava