2013-04-24 99 views
0
def censor2(filename): 
    infile = open(filename,'r') 
    contents = infile.read() 
    contentlist = contents.split() 
    print (contents) 
    print (contentlist) 
    for letter in contentlist: 
     if len(letter) == 4: 
      print (letter) 
      contents = contents.replace(letter,'xxxx') 
    outfile = open('censor.txt','w') 
    outfile.write(contents) 
    infile.close() 
    outfile.close() 

此代碼在Python中工作。它接受一個'example.txt'文件,讀取它並循環,用字符串'xxxx'代替所有4個字母的單詞,並將其輸出到一個名爲censored.txt的新文件(保持原始格式!)。file.replace('abcd')也會替換'abcde'如何替換確切的值?

我用替換函數並找到要替換的單詞。但是,單詞'abcd'被替換,下一個單詞'abcde'變爲'xxxxe'

如何防止'abcde'被更改?

我無法得到下面的例子工作,但在使用re.sub模塊後,我發現下面的代碼只能替換4個字母的單詞而不是5個字母的單詞。

contents = re.sub(r"(\b)\w{4}(\b)", r"\1xxxxx\2", contents) 

回答

3

怎麼樣:

re.sub(r'\babcd\b','',my_text) 

這將要求它具有兩側

+1

這個答案是downvoted,但他只是忘記了字符串文字前面的'r'。這是一個簡單的錯字/錯誤,任何人都可以輕鬆編輯答案來糾正錯誤。這突顯了Wiki-style協作/社區編輯與基於聲譽的個人競爭之間Stackexchange模型中的怪異張力。 – 2013-04-24 00:24:58

+1

@CharlesSalvia這是我最近看到的最愚蠢的東西(downvotes)。也許另一個問題是,價格降低沒有足夠的懲罰? – David 2013-04-24 00:30:10

+0

@大衛,這是一個棘手的問題 - 因爲如果得票數太多,沒有人願意付出代價,那麼蹩腳的回答就不會受到懲罰。我不知道最佳解決方案在這裏 - 但我絕對認爲SO的維基式協作/社區編輯方面是最被忽視的特徵。 – 2013-04-24 00:32:27

1

這是正則表達式可以是有益的字邊界。你會想是這樣的:

import re 
... 
contents = re.sub(r'\babcd\b', 'xxxx', contents) 
.... 

\b是「單詞邊界」的標記。它匹配從單詞到空白字符,標點符號等的變化。

您需要使用正則表達式模式的r''樣式字符串,以避免將反斜槓視爲轉義字符。