python-文字列内の文字と数字以外の他の要素を削除(保持)する方法

前書き

  Leetcodeのブラッシングの質問
ここに画像の説明を挿入します
、次の問題が発生しました。「、」「:」などの文字を含む文字列では、文字と数字のみが考慮されるため、もちろん文字と数字のみを保持し、その他は削除します。

1. re.sub()関数を使用します

正則化の知識については、このWebサイトを参照してください
  。Pythonのreモジュールは、文字列内の一致を置き換えるためのre.sub構文を提供します

re.sub(pattern, repl, string, count=0, flags=0)

パラメータ:

pattern:通常のパターン文字列。
repl:置換された文字列。関数にすることもできます。
string:検索および置換される元の文字列。
count:パターンが一致した後の置換の最大数。デフォルトの0は、すべての一致を置換することを意味します。
フラグ:コンパイル中に使用されるマッチングモード(デジタル形式)。
最初の3つは必須パラメーターであり、最後の2つはオプションのパラメーターです。

import re

s = "A man, a plan, a canal: Panama"
s = s.lower()
result = re.sub('[\W_]+', '', s)
print(result)
# amanaplanacanalpanama

すごいじゃないですか?
正規表現パターン構文の特別な要素を利用します。

[…]は、個別にリストされた文字のグループを表すために使用されます。[amk]は「a」、「m」、または「k」に一致します
[^…] []にない文字:[^ abc]は、a、b、を除いて一致しますc以外の文字。
re *は0個以上の式に一致します。
re +は1つ以上の式に一致します。
re?前の正規表現で定義された0または1のフラグメントに一致し、貪欲でない方法
\ wは英数字のアンダースコアに一致します
\ Wは非数値の文字のアンダースコアに一致します

したがって、[\ W _] +は1つ以上の数字以外の文字に一致することを意味します。
[\ W _] +を[\ w _] +に変更すると、1つ以上の数字に一致することを意味します

import re

s = "A man, a plan, a canal: Panama"
s = s.lower()
result = re.sub('[\w_]+', '', s)
print(result)
#  ,  ,  : 

2.isalpha()+ isnumeric()+ join()

  このメソッドは、文字列内の各要素を反復処理し、joinメソッドを組み合わせることにより、文字列の組み込みメソッドisalpha()およびisnumeric()を利用します(join()メソッドは、シーケンス内の要素を新しい文字列を生成するために指定された文字)。

s = "A man, a plan, a canal: Panama"
s = s.lower()
# 去掉除字符串与数字外的其他
s = [i for i in s if i.isalpha() or i.isnumeric()]
s = "".join(s)
print(s)
#  amanaplanacanalpanama

文字と数字のみを削除することもできます

s = "A man, a plan, a canal: Panama"
s = s.lower()
# 去掉除字符串与数字外的其他
s = [i for i in s if not i.isalpha() and not i.isnumeric()]
s = "".join(s)
print(s)
#   ,  ,  : 

おすすめ

転載: blog.csdn.net/weixin_46649052/article/details/114441811