[解決済み] Pythonで文字列から特定の文字を削除する
質問
Pythonを使って、ある文字列から特定の文字を削除しようとしています。これは、私が今使っているコードです。残念ながら、これは文字列に対して何もしていないように見えます。
for char in line:
if char in " ?.!/;:":
line.replace(char,'')
どうすればいいのでしょうか?
どのように解決するのですか?
Pythonの文字列は
不変
(変更できない)。 このため
line.replace(...)
は、古い文字列を変更するのではなく、新しい文字列を作成するだけです。 そのためには
リバインド
(に割り当てる。
line
という文字を削除して、その変数に新しい値が入るようにします。
また、あなたがやっている方法は、相対的に、ちょっと遅くなりそうです。 二重にネストされた構造を見て、もっと複雑なことが起こっているのだと一瞬思うかもしれません。
Python 2.6 以降のバージョン * では、代わりに次のように使用することができます。
str.translate
, (
見る
Python 3 の回答
以下
):
line = line.translate(None, '!@#$')
または正規表現による置き換えで
re.sub
import re
line = re.sub('[!@#$]', '', line)
括弧で囲まれた文字は
文字クラス
. の中にある文字は
line
の2番目のパラメータに置き換えられます。
sub
: 空の文字列です。
Python 3 の回答
Python 3では、文字列はUnicodeです。あなたは少し違った方法で翻訳する必要があります。kevpieは、このことについて
コメント
には、ある回答でそのことが書かれています。
のドキュメントを参照してください。
str.translate
.
を呼び出すと
translate
メソッドを使用する場合、上で使用した 2 番目のパラメータを渡すことはできません。また
None
を最初のパラメータとします。その代わり、翻訳テーブル(通常は辞書)を唯一のパラメータとして渡します。このテーブルは
序列値
を呼び出した結果です。
ord
を、それらを置き換えるべき文字の序数に置き換えるか、あるいは、私たちにとって有用な
None
というように、削除を指示します。
つまり、Unicode文字列で上記のダンスを行うには、次のようなものを呼び出すことになります。
translation_table = dict.fromkeys(map(ord, '!@#$'), None)
unicode_line = unicode_line.translate(translation_table)
ここで
dict.fromkeys
と
map
を含む辞書を簡潔に生成するために使用されます。
{ord('!'): None, ord('@'): None, ...}
もっとシンプルに 別の回答では で、翻訳テーブルをその場で作成します。
unicode_line = unicode_line.translate({ord(c): None for c in '!@#$'})
あるいは、提起されたように
ジョセフ・リー
で同じ翻訳テーブルを作成します。
str.maketrans
:
unicode_line = unicode_line.translate(str.maketrans('', '', '!@#$'))
* 以前のPythonとの互換性を保つために、翻訳テーブルを作成して
None
:
import string
line = line.translate(string.maketrans('', ''), '!@#$')
ここで
string.maketrans
は
翻訳テーブル
これは、序数が0から255の文字を含む単なる文字列である。
関連
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] バイトを文字列に変換する
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] インデックスを指定してリストから要素を削除する方法
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】ネストされたディレクトリを安全に作成するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonコンテナのための組み込み汎用関数操作
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
Python入門 openを使ったファイルの読み書きの方法
-
Pythonの画像ファイル処理用ライブラリ「Pillow」(グラフィックの詳細)
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】 NameError: グローバル名 'xrange' は Python 3 で定義されていません。
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない