2017-04-22 13 views
2

\uで始まる文字列が出現し、それに続いてさまざまな形式の4文字の16進数(ユニコードオブジェクトではなく、データ内の実際の文字列が原因でクリーンアップしますデータ)とその出現を空白で置き換えたいと考えています。特定のパターンに対する正規表現

例のテキストファイル:例についてはHello \u2022 Created, reviewed, \u00e9executed and maintained

文字列\u2022\u00e9の発生があるだろう、私は\uを見つけて2022、その後に続く00e9をサブストリング4文字と一緒にそれを削除したいと思います。私はこのパターンのための適切な正規表現を探しています。

コード例:本当に

import json 
import io 
import re 

files = glob('Candidate Profile Data/*') 

for file_ in files: 
    with io.open(file_, 'r', encoding='us-ascii') as json_file: 
     json_data = json_file.read().decode() 
     json_data = re.sub('[^\x00-\x7F]+',' ',json_data) 
     json_data = json_data.replace('\\n',' ') 
     json_data = re.sub(r'\\u[0-9a-f]{,4}',' ',json_data) 

     print json_data 
     json_data = json.loads(json_data) 
     print(json_data) 
+0

もし正しくなったら、文字列からユニコード文字を削除する必要がありますか? –

+0

@LeonardoChirivìいいえ、私は、彼らが実際のユニコード文字ではなく、データそのものの文字列の形であることを明示しています。 –

答えて

2

、私たちはあなたのコードの例が必要ですが、ポインタとして、私はあなたが必要だと思うの正規表現は、ここでr'\\u[0-9a-f]{,4}'

のようなものがあるの例です。使用されていること:

>>> import re 
>>> my_string='Hello \\u2022 Created, reviewed, \\u00e9executed and maintained' 
>>> my_string 
'Hello \\u2022 Created, reviewed, \\u00e9executed and maintained' 
>>> re.sub(r'\\u[0-9a-f]{,4}',"",my_string) 
'Hello Created, reviewed, executed and maintained' 

は、まだ我々は、より正確な答えを提供できるように、あなたのコードの例を見てみたい

+0

それはうまくいかなかったし、サンプルデータも追加しました。 –

+0

はい、前の 'r'を追加した後はうまくいきました。私は、私がしようとしているもののサンプルコードを追加しました。私のコードを単一の正規表現にマージすることができれば、私はそれに感謝します。 –