2016-08-31 9 views
0

非常に大きな文字列(300 MB +)があり、その中にいくつかのガベージデータがあります。私はPython 2.7 32ビットを使用しています。大括弧で囲まれた値のため、Pythonの正規表現に問題があります

ユーザーが使用するファイルだけ時間をかけて成長しようとしているので、私は\nのような改行文字で[linender]の値を置き換えるためにre.subを使用しようとしていますので、私は、文字列操作replaceを使いたくありませんでしたかos.linesep

それを行うのに十分な簡単なようなので、私のパターンは次のとおりです。

re.sub('\[lineender]\b, os.linesep, text_value)

これは間違っている文字列全体に置き換えられている唯一の値になります。

サンプルデータ:

s = """A|B|3[lineender]E|F|2M[lineender]"""

私はこの作業を取得するために私の正規表現を変更する必要がどのように上の任意のアイデア? 私は基本的に括弧の単語を改行文字で置き換える必要があります。あなたは、生の文字列としてパターン渡す必要があり

+0

're.sub(R '\ [lineender]'、os.linesep、TEXT_VALUE)' ' –

答えて

2

注:代わり

re.sub(r'\[lineender\]\b', os.linesep, text_value) 

を、あなたは\\(ダブルバックスラッシュ)を使用する必要があります生の文字列リテラルはバックスペースです。単語境界r'\b'を使用する場合は、]の後にcharという文字(文字、数字またはアンダースコア)が必要です。

re.sub(r'\[lineender]', os.linesep, text_value) 

あなたは]後には単語文字がないことを確認したい場合は

は、あなたが \B\bに取って代わるかもしれないが、あなたが r接頭辞を使用していることを確認してください:あなたのケースでは、私は完全に \bを削除したいです文字列リテラルを生のままにします。

Python demoを参照してください:

import re, os 
text_value = """A|B|3[lineender]E|F|2M[lineender]""" 
print('"{}"'.format(re.sub(r'\[lineender]', os.linesep, text_value))) 
+1

あなたは魅力的に働いてくれてありがとう! –

1

:非で\bこと

re.sub('\\[lineender\\]\\b', os.linesep, text_value) 
+1

]'する必要はありませんを使用し、 '\のB'を削除します逃げる。 – Tushar

関連する問題