2012-10-03 21 views
2

做多個string.replace的快速方法是什麼? 我想添加空格縮短像如何以更清晰的方式做多個字符串替換? - Python

he'll -> he 'll 
he's -> he 's 
we're -> we 're 
we've -> we 've 

也是我加入空格之前和標點符號之間的英語單詞:

"his majesty" -> " his majesty " 
his; majesty -> his ; majesty 

是否有更快,更清潔的方式做它? 這爲宗旨有點慢,但我一直在做這樣說:

def removeDoubleSpace(sentence): 
    sentence.replace(" ", " ") 
    if " " in sentence: 
    removeDoubleSpace(sentence) 

def prepro(sentence): 
    sentence = sentence.replace(",", " ,") 
    sentence = sentence.replace(";", " ; ") 
    sentence = sentence.replace(":", " : ") 
    sentence = sentence.replace("(", " (") 
    sentence = sentence.replace("(", ") ") 
    sentence = sentence.replace("‘"," ‘ ") 
    sentence = sentence.replace('"',' " ') 
    sentence = sentence.replace("'re", " 're") 
    sentence = sentence.replace("'s", " 's") 
    sentence = sentence.replace("'ll", " 'll") 
    sentence = removeDoubleSpace(sentence) 
    return sentence 
+0

您是否嘗試過使用' re.sub()'從正則表達式模塊? –

+1

所有'replace'調用*都不做任何事情*,因爲它們返回修改過的字符串(因爲字符串是不可變的)。 – nneonneo

回答

5

你可以使用一些正則表達式來完成相同的任務:

import re 

# Replace multiple consecutive spaces with a single space 
# Example: "One Two Three Four!" -> "One Two Three Four!" 
sentence = re.sub(' +', ' ', sentence)  

# Surround each instance ; : () ‘ and " with spaces 
# Example: '"Hello;(w)o:r‘ld"' -> " Hello ; (w) o : r ‘ ld " 
sentence = re.sub('([;:()‘"])', ' \\1 ', sentence) 

# Insert a space before each instance of , 's 're and 'll 
# Example: "you'll they're, we're" -> "you 'll they 're , we 're" 
sentence = re.sub("(,|'s|'re|'ll)", ' \\1', sentence) 

return sentence 
+0

「+」,「','\\ 1」是什麼意思?這會比替換更快嗎? – alvas

+1

@ 2er0我添加了一些評論,''+''匹配多個連續的空格。替換字符串中的'\\ 1'將插入模式中括號('()')之間匹配的值。 你將不得不測試它是否更快,因爲我沒有訪問你的測試數據,但我的直覺是肯定的。 – verdesmarald

+0

@ 2ero如果這仍然不夠好,您還可以遍歷字符串中的字符,並按順序在列表中構建輸出,然後將其轉換爲字符串。然而,這種方法對代碼來說是痛苦的,如果其他方法都失敗了,我只會推薦它。我也不確定績效收益是否會很大。 – verdesmarald

相關問題