2016-04-26 5 views
0

を私は文から句読点を削除するには、次のコードを使用しています:削除句読点と意味の文を返す - Pythonの

import string 
    translator = str.maketrans({key: None for key in string.punctuation}) 

    s = "I am,a boy" 
    print(s.translate(translator)) 

しかしとき例えば、S =「私は、少年よ」、出力は「私は男の子」、出力は「私は男の子」(スペースはb/nが "am" & "a")になります。しかし、元々スペースがあった場合、s = "私は男の子"のように、出力が「私は男の子」、つまり句読点を削除するだけです。

+0

句読点をスペースで置き換えて2重スペースを1つのスペースに置き換えないのはなぜですか? –

+0

@ TadhgMcDonald-Jensen:コメントをいただきありがとうございますが、s = "I am、boy"の場合、出力には3つの空白が入ります。どのように私はそれらの二重と三重のスペースを排除することができますか? – Pela647

+0

ブルートフォース:「中」「s」:s = s.replace( "" "、" ")'(愚かなので、私の空白を崩壊し続ける) – kindall

答えて

4

これを行う最も簡単な方法は、すべての句読点をスペースで置き換え、文字列を分割して再結合することによって、空白のすべての実行を単一のスペースで置き換えることです。 (Tadhgが指摘するが、これはまた、改行を置き換える。)

import string 
translator = str.maketrans({key: " " for key in string.punctuation}) 

s = "I am,a boy" 

print(" ".join(s.translate(translator).split())) 

ジョブはまた、正規表現で行うことができます:今

import re, string 
# need to escape a couple of characters to build a valid regex 
regex = " *[%s]+ *" % string.punctuation.replace("\\", "\\\\").replace("]", "\\]") 

s = "I am,a boy" 
print(re.sub(regex, " ", s)) 

、この正規表現はで発見句読点には対応していません文字列の先頭または末尾。単一のスペースに変換されます。

print(re.sub(regex, " ", s).strip()) 
+0

私はポストするつもりだった'\ n'をスペースに変更します。 –

関連する問題