2017-12-29 9 views
1

次の正規表現を使用して、英数字以外の文字(空白を削除しない)をstringから削除します。英数字以外の文字を取り除いた後に取得

pattern = re.compile('([^\s\w]|_)+', re.UNICODE) 

しかし、それでもまだ、私はフィルタリング後の次の文字列を取得しています:

ç 
äää á á 
à 
åî òëâáä 
öè 
ãóûåüôç ñùü 
ç ç 
ôùñ öùî íîêïî 
îïáìõáíö 
ùèõáíö 
òííòê õáíö 
ø â áí 
åîæíî 
ííö ùîòõàä 
ä 
èèñ ñùü 
èèñ ñùü 
äóòåô êã 
ïùùïäó ñùü 
üíûçôñó ñùü 

私は正規表現を使用してそれらに対処するにはどうすればよいですか?非英数字の文字を削除した後、上記の文字列を空の文字列にします。

私は前処理しようとしているユーザーのクエリのリストを持っています。私は以下のように該当するコードスニペットを提供しています。

query_text = ' '.join([pattern.sub(' ', word) for word in tokens[1].lower().split()]) 
query_text = query_text.strip() 

ご注意:

  • を、私は文字列与えられたスペースを除く任意の英数字以外の文字を削除して取り扱っております問題。
  • 英語以外の英数字を削除します。 re.UNICODEフラグ付き
+0

と同等になるように

>>> pattern = re.compile('([^\s\w]|_)+', re.UNICODE) >>> pattern.sub("", text) 'ß\n \n\n Æ \n\nªºß πº\nß ß\nπ πÆ ÆØÆ\nÆص\nπµ\n µ\n \nÆÆ\n πƵ\n\n πº\n πº\n \nØππØ πº\nºªß πº' >>> pattern = re.compile('[^\sa-zA-Z0-9]+', re.UNICODE) >>> pattern.sub("", text) '\n \n\n \n\n \n \n \n\n\n \n \n\n \n\n \n \n \n \n ' 

は、またはあなたが明示的にre.ASCIIフラグを設定することができます。あなたが実際に*使用しているコードはどこですか? – BrenBarn

+0

@BrenBarnが追加されました。 –

+1

あなたがしようとしていることは明確ではありません。ここでのフィルタリングは何ですか? 'pattern.sub'は? –

答えて

1

(と、少なくともパイソンの私のバージョンでは、また、それなし)、クラス\wは、ギリシャ文字、ウムラウト、合字、および他のような多くの「非英語」の英数字を含み、 。それらも削除したい場合は、\wを使用するのではなく、より明示的な文字クラス(a-zA-Z0-9など)を使用してください。 \wは実際にあなたがちょうどあなたが表現をコンパイルコードを表示[a-zA-Z0-9_]

>>> re.sub("[^\s\w]", "", text, flags=re.UNICODE) 
'ß\n  \n\n Æ \n\nªºß πº\nß ß\nπ πÆ ÆØÆ\nÆص\nπµ\n µ\n \nÆÆ\n πƵ\n\n πº\n πº\n \nØππØ πº\nºªß πº' 
>>> re.sub("[^\s\w]", "", text, flags=re.ASCII) 
'\n  \n\n \n\n \n \n \n\n\n \n \n\n \n\n \n \n \n \n ' 
関連する問題