2013-07-15 76 views
1

我將如何使用一組單詞來替換正則表達式中的另一組單詞?使用兩套單詞進行查找和替換RE

我給我最好的拍攝,這裏是我結束了(當然它不會做我想做的):

count = 0 
count2 = 0 
set1 = ['word1','word2','word3'] 
set2 = ['new_word1','new_word2','new_word3'] 
with open(file, 'r+') as book: 
    for line in book: 
     if count<2: 
      set1var = set1[count] 
      set2var = set2[count2] 
      reg1 = re.sub(r''+set1var,r''+set2var,line) 
        f.write(reg1) 
        if line != reg1: 
          count+=1 
          count2+=1 
+0

可能不是一個很好的使用正則表達式的。你最好在空間上分割你的輸入行,然後迭代每個單詞並看看它是否是你的字典。然後重新組裝線。 –

+0

另一個想法:有一個old_word - > new_word的字典。構造一個正則表達式,它是由'|'連接的所述字典集的鍵。這是你的搜索正則表達式。作爲替代值,使用找到的字符串在字典中查找。 –

+0

你們中的任何一個都可以顯示字典方法的例子嗎? –

回答

1

這裏是一個很好的例子:

>>> import re 
>>> set1 = ['word1','word2','word3'] 
>>> set2 = ['new_word1','new_word2','new_word3'] 
>>> translation = dict(zip(set1, set2)) 
>>> 
>>> 
>>> text = ''' 
... here I am word1 talking about word2. 
... ipsum ipsumipsum ipsum ipsum ipsum ipsum ipsum 
... ipsum ipsumipsum word1 ipsum ipsum ipsum ipsum 
... ipsum ipsumipsum ipsum ipsum word2 ipsum ipsum 
... ipsum ipsumipsum ipsum ipsum ipsum ipsum ipsum 
... ''' 
>>> 
>>> # compile a pattern matching any of the words 
... pattern = re.compile('(%s)' % '|'.join(set1)) 
>>> 
>>> def translate(match): 
...  return translation[match.group(0)] 
... 
>>> # replace with: for line in book: 
>>> for line in text.splitlines(): 
...  print pattern.sub(translate, line) 
... 

here I am new_word1 talking about new_word2. 
ipsum ipsumipsum ipsum ipsum ipsum ipsum ipsum 
ipsum ipsumipsum new_word1 ipsum ipsum ipsum ipsum 
ipsum ipsumipsum ipsum ipsum new_word2 ipsum ipsum 
ipsum ipsumipsum ipsum ipsum ipsum ipsum ipsum 
>>> 

我不使用countcount2雖然,我承擔d你想取代所有的發生。 因爲我用我的示例文本,而不是這裏的文件是你需要的東西:

with open(outputfile, 'w') as output: 
    with open(file, 'r+') as book: 
     for line in book: 
      output.write(pattern.sub(translate, line)) 
+0

我只需要文件並分配一個名爲文本的變量? –

+0

我得到一個錯誤。 –

+0

我解決了這個問題,謝謝! –

2

你的意思是完成這件事:

inputdata=open(file).read() 
for initial,final in zip(set1,set2): 
    inputdata=inputdata.replace(initial,final) 
print str #or write to file 
+1

偉大的解決方案...但不要使用保留名稱'str'和'new'。 – tdelaney

+0

@tdelaney正確地說。我怎麼能這麼愚蠢?編輯答案。感謝您指出。 –

+0

'new'在Python中並不是特別的(即使語法高亮者認爲如此)。 'str'是內置類型的名稱,所以最好避免使用它作爲變量名(但它會起作用)。 – pts

相關問題