2011-08-22 11 views
5

私は時々奇妙な文字列を持っています。これらはブラウザでは表示されませんが、文字列の一部であり、len()でカウントされます。 どうすれば削除できますか? Strip()は通常のスペースを削除しますが、その記号は削除しません。Python - 文字列から隠した記号を削除するには?

+0

このソリューションを参照してください:http://stackoverflow.com/questions/92438/stripping-non-printable-characters-from-a-string-in-python –

答えて

2

収集あなたはそれがZにZ、Aに以外の任意の文字を削除します有効にして、この

import re 
text = re.sub("[^a-z0-9]+","", text, flags=re.IGNORECASE)

のように残りの部分を削除したい文字のセットと、0から9まで

+0

完全なutf8記号が必要です:/ – robos85

+0

@ robos85、あなたストリップするかストリップしないかの情報が必要です。あなたはutf8のすべての無効な文字を取り除く必要があると思いますか?そのための解決策がありますが、目に見えない/印刷できない文字が含まれている可能性があります。 – YOU

11

使用stringモジュールの文字カテゴリ。あなたはすべての印刷可能な文字を許可したい場合は、あなたの答えに

from string import printable 
new_string = ''.join(char for char in the_string if char in printable) 

ビルを行うことができ、あなたもre.subでこれを行うことができます。

new_string = re.sub("[^{}]+".format(printable), "", the_string) 

をまた、あなたがすべての文字を表示する場合文字列でも印刷できないものは、いつでも印刷できない文字のため\x00のようなものが表示されます

print repr(the_string) 

行うことができます。

+0

これは正解です。 – dotancohen

+0

秒の答えは魅力のように働いた、ありがとう。 – Yehonatan

1

正規表現は、あらゆる種類の文字列解析に適した非常に普遍的なツールです。スピードが問題であれば、文字列クラスの "translate"メソッドも役に立ちます。

まず、あなたが何も変わりません(「アイデンティティ」)マッピング定義:あなたは、各「」「B」で、あなたはあなたのマッピングを変更

を交換したい場合は

mapping = map(chr, range(256)) 

mapping[ord('a')] = 'b' 

は今、あなたは、 "翻訳" する方法のためにテーブルを作成:

table = "".join(mapping) 

print "abc".translate(table) 

"bbc"と表示されます。

あなたが本当に「A」を削除したい場合は、上記のマッピングを変更するテーブルを作成してから、次のように変換 を呼び出すことはありません:

print "abc".translate(table, "a") 

はあなたに「BC」を与えます。

テーブルが作成されると、translateメソッドは非常に高速です。

だからあなたの場合にはすべてのあなたの不要な文字が空白

mapping = map(chr, range(256)) 
table = "".join(" " if c in unwanted_chars else c for c in map(chr, range(256))) 

と文字列の先頭と末尾に不要な文字 を無視したlen("my string".translate(table).trim())を使うにマッピングされるように変更することができます。

len("my string".translate(table, unwanted_chars))を使用すると、不要な文字はすべて無視されます。

+0

ニース。私はもう一度投票すると明日+1します。私は翻訳について考えましたが、構文を調べるのは怠惰でした。 – agf

関連する問題