2017-10-30 8 views
-3

は、2つの部分の質問です。間隔とパターン置換

現在コード:

import re 
# Read inputfile 
with open('input.txt', 'r') as file : 
    inputfile = file.read() 

# Replace extras spaces with single space. 
#outputfile = re.sub('\s+', ' ', inputfile).strip() 
outputfile = ' '.join(inputfile.split(None)) 

# Write outputfile 
with open('output.txt', 'w') as file: 
    file.write(outputfile) 

パート2:余分なスペースが削除されると

。私はパターンミスを検索して置き換えます。

同様: '[' から '['

Pattern1 = re.sub(' [ ', ' [', inputfile) 

エラーがスローされます。

昇給エラー、Vの#無効な式 エラー:正規表現が、

の予想外の終わりを。私は、問題が解決された間隔の後に句読点の問題に関して処理するための多くの状況を得た:(ハイフンの前と後に一緒に言葉を結合するために、たとえば)

Pattern1 = re.sub(' - ', '-', inputfile) 

これが...動作します。

パターンが以前のパターン結果の出力を見て、さらに移動しないようにしたいと思います。

句読点の前後の空白をちょうど切る方がよいでしょうか。最初の部分のために、あなたは、改行ブロックで、それを分割し、各ラインを圧縮し、その後、改行に戻ってそれに参加し、そのようなことができ

+0

正規表現を使用して検索して置き換えたいのは、単純な文字列の置き換えだけです。文字 '['は正規表現では意味を持ち、 ' - 'にも同じ意味です。 – alfasin

+0

はい、あなたは正しいです。 str replaceを使用できました。しかし、スピードは賢明ですが、これはより速いですか? –

+0

通常、正規表現の方が処理速度が遅くなります(ほとんどのプログラミング言語で)。参照:https://stackoverflow.com/questions/5668947/use-pythons-string-replace-vs-re-sub – alfasin

答えて

1

import re 
text = "\n".join(re.sub(r"\s+", " ", line) for line in re.split("\n+", text)) 
print(text) 

第二部では、あなたは以来[をエスケープする必要がありますそれは、この文脈では特別なものではありませんあなたはそれが[と一致しないため、]をエスケープする必要はありません

import re 
text = re.sub("\[ ", "[", text) 
text = re.sub(" ]", "]", text) 
print(text) 

注:それはそうのような(文字クラスを定義するために使用される)正規表現のメタ文字、です。第二部、text = text.replace("[ ", "[").replace(" ]", "]")のための別の方法として

Try It Online!

あなたも、正規表現を必要としないので。

関連する問題