簡體   English   中英

帶有特殊字符的 String.replace() 只替換其中的一些

[英]String.replace() with special characters only replacing some of them

我在本網站和其他網站上看過許多關於替換字符的不同帖子,並且我以前做過字符串替換。 然而,在這個特定的例子中,我遇到了一個意想不到的問題。 我希望我只是遺漏了一些明顯的東西......

我正在嘗試用 HTML 實體代碼替換特殊字符列表。 我已經嘗試了幾個版本,從純文本替換( ½½ )到最后一次迭代,使用字節編碼的字符串(如建議here

我的代碼的功能非常簡單。 我得到一個文件的內容:

with open(cur_file, 'r', encoding='utf-8') as file_handle:
    file_contents = file_handle.read()
file_handle.close()

然后我調用我的'replacer()' function:

good_text = replacer(file_contents)

replacer() function 的內容:

def replacer(text):
    replace_chars = {
        b'\xc2\xbd': '½',    #½
        b'\xe2\x80\x9c': '"',  #“
        b'\xe2\x80\x9d': '"',  #”
        b'\xe2\x80\x99': '´', #’
        b'\xe2\x80\x93': '—', #–
        b'\xc2\xa9': '©'       #©
    }
    
    for k, v in replace_chars.items():
        good_text = text.replace(k.decode('utf-8'), v)
        print('replacing ' + k.decode('utf-8') + ' with ' + v)
    return good_text

然后我將新文本保存回文件中:

    with open(cur_file, 'w', encoding='utf-8') as file_handle:
        file_handle.write(good_text)
    file_handle.close()
    
    print('Done!')

在控制台中,我運行它並得到:

replacing ½ with ½
replacing “ with "
replacing ” with "
replacing ’ with ´
replacing – with —
replacing © with ©
Done!

這是預期的。 但是,我要替換其中字符串的文件具有以下內容:

replace_chars = {
        '½': '½',
        '“': '"',
        '”': '"',
        '’': '´',
        '–': '—',
        '©': '©'

我希望該文件在第一列中不包含½或其他字符,而是類似於'©': '©'

每次通過你的循環,你都是從原始文本替換,而不是之前替換的結果。 所以最后的結果只是最后的替換,而不是全部。

更改循環,以便將結果存儲回同一個變量中。

    for k, v in replace_chars.items():
        text = text.replace(k.decode('utf-8'), v)
        print('replacing ' + k.decode('utf-8') + ' with ' + v)
    return text

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM