Python-docx regex thay thế từ trong văn bản

tôi đang làm 1 dự án cá nhân thay đổi các từ trong 1 file docx. Tôi dùng regex tìm và thay thế đc tất cả các từ nhưng thực sự tôi nâng cao nó hơn 1 chút là có thể chọn vị trí của từ cần thay đổi. Nhưng khả năng hiện tại thì có vẻ không được. Tôi hi vọng mọi người có thể giúp tôi đưa ra các giải quyết. Đây là đoạn mã tôi sử dụng

import docx
from docx import Document
import re



def keepfont(filename,key,value):
    doc = Document(filename)
    countKey = 0

    for p in doc.paragraphs:

        match = re.findall(key,p.text,re.IGNORECASE)
        for igkey in match:
            if igkey in p.text:
                split_text = p.text.split()
                 countKey = split_text.count(igkey)
                 inline = p.runs
                 for j in range(len(inline)):
                     if key in inline[j].text:
                         text = inline[j].text.replace(igkey, value)
                         inline[j].text = text
     doc.save('dest1.docx')


keepfont(path of file docx, 'từ thay đổi', 'từ đã đổi')

Chọn vị trí từ cần đổi có nghĩa là sao? Tìm được 3 từ, chỉ muốn đổi từ thứ hai, 2 từ còn lại giữ nguyên?

Nếu vậy thì chỉ cần 1 biến đếm (tăng dần) vào vòng lặp tại match thôi, khi nào biến đếm trùng với vị trí cần đổi thì thực hiện đổi.

2 Likes

đúng rồi bạn mình đã thử và nó chỉ dừng lại ở từ đầu tiên.

Do bạn triển khai ý tưởng sai hoặc chưa phù hợp.

3 Likes

bạn có thể giúp mình phần khung được không ạ? để mìn có thể xem chỗ mình sai được không ạ?

match hình như là list có thể truy xuất trực tiếp thông qua chỉ số mà. Bạn chỉ cần truy xuất trực tiếp thứ tự muốn thay đổi để thay thôi.
Mà mình quên là bạn có truy xuất theo đoạn văn bản, và dùng phương pháp thay thế hơi bị không ổn.
Mình thì chưa rõ từng hàm/thuộc tính của docx/Document nên khó mà chỉ cụ thể cho bạn.

3 Likes

mình tạo được các tuple từ trong match:
[‘Việt Nam’]
[‘VIỆT NAM’]
[‘Việt Nam’]
[‘Việt Nam’]
[‘VIỆT NAM’]
[‘VIỆT NAM’]
[‘VIỆT NAM’]
Giờ lam thế nào để đưa nó vào chung trong 1 tuple vậy ạ?

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?