ダッシュとスペースを除いて、Python文字列からすべての特殊文字を削除したいと思います。
これは正しいです?
import re
my_string = "Web's GReat thing-ok"
pattern = re.compile('[^A-Za-z0-9 -]')
new_string = pattern.sub('',my_string)
new_string
>> 'Webs GReat thing-ok'
# then make it lowercase and replace spaces with underscores
# new_string = new_string.lower().replace (" ", "_")
# new_string
# >> 'webs_great_thing-ok'
示されているように、他の特殊文字を削除した後、最終的にスペースをアンダースコアに置き換えたいと思いますが、段階的に行うと考えました。一挙にすべてを行うPythonの方法はありますか?
コンテキストとして、この入力をMongoDBコレクション名に使用しているため、最終的な文字列の制約を次のようにします。ダッシュとアンダースコアを使用できる英数字。
あなたは実際にあなたの文字列を「スラッグ化」しようとしています。
サードパーティ(およびPython 2固有)のライブラリを使用してもかまわない場合は、slugify
(pip install slugify
)を使用できます。
import slugify
string = "Web's GReat thing-ok"
print slugify.slugify(string)
>> 'webs_great_thing-ok'
自分で実装できます。slugify
のコードはすべて
import re
import unicodedata
def slugify(string):
return re.sub(r'[-\s]+', '-',
unicode(
re.sub(r'[^\w\s-]', '',
unicodedata.normalize('NFKD', string)
.encode('ascii', 'ignore'))
.strip()
.lower())
これはPython2固有であることに注意してください。
あなたの例に戻ると、あなたはそれをワンライナーにすることができます。それが十分にPythonicであるかどうかは、決定するのはあなた次第です(A-z
代わりに短縮された範囲に注意してくださいA-Za-z
):
import re
my_string = "Web's GReat thing-ok"
new_string = re.sub('[^A-z0-9 -]', '', my_string).lower().replace(" ", "_")
更新ここには、より堅牢でPython3互換の「slugify」ライブラリがあるようです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加