1

次の行があるファイルを読み取りました:Fixes: Saurabh Likes python

Fixes:上記の行の一部を削除したい。私はそのために正規表現を採用していますが、以下のスニペットは次のような出力を返します

Saurabh Likes python\r

どこ\rから来たのかしら。rstrip()、などのようにそれを削除するためにすべてのストリップオプションを試しlstrip()ました。しかし、何も機能しませんでした。誰かが私にを取り除く方法を提案できますか\r

patternFixes ='\s*'+'Fixes'+':'+'\s*'
matchFixes= re.search(patternFixes,line, re.IGNORECASE)
        if matchFixes:
                    patternCompiled = re.compile(patternFixes)
                    line=patternCompiled.sub("", line)
                    #line=line.lstrip()
                    relevantInfo = relevantInfo+line
                    continue

前もって感謝します!-サウラブ

4

4 に答える 4

0

おそらくファイルをバイナリモード(open(filename, "rb")またはそのようなもの)で開いたでしょう。テキストファイルを使用している場合は、これを行わないでください。

open(filename)代わりに使用してください。\nこれで、Pythonは、現在のプラットフォームに関係なく、すべての改行をに自動的に正規化します。

また、なぜ単純ではないのですpatternFixes = r'\s*Fixes:\s*'か?なぜすべての+es?

次に、正規表現を何度も再コンパイルするなど、多くの不要な処理を実行します。

だから、私の提案(これはあなたのコード(そしてファイル処理)と同じことをします:

r = re.compile(r'\s*Fixes:\s*')
with open(filename) as infile:
    relevantInfo = "".join(r.sub("", line) for line in infile if "Fixes:" in line)
于 2012-08-24T21:43:40.877 に答える
0
>>> import re
>>> re.sub('Fixes:\s*', '', 'Fixes: Saurabh Likes python')
'Saurabh Likes python'

または'

>>> re.sub('\s*'+'Fixes'+':'+'\s*', '', 'Fixes: Saurabh Likes python')
'Saurabh Likes python'

'\r'はもうありません

再現方法について詳しく教えてください。

EDItはあなたのコードでも再現できません

>>> line = 'Fixes: Saurabh Likes python'
>>> patternFixes ='\s*'+'Fixes'+':'+'\s*'
>>> matchFixes= re.search(patternFixes,line, re.IGNORECASE)
>>> if matchFixes:
...     patternCompiled = re.compile(patternFixes)
...     line=patternCompiled.sub("", line)
...     print line
...     line=line.lstrip()
...     print line
... 
Saurabh Likes python
Saurabh Likes python
>>> 
于 2012-08-24T21:49:28.890 に答える
0

取り除くための提案\r

を使用してファイルを開いたと思いますopen(filename)。オープンのマニュアルに従う:

modeを省略すると、デフォルトで「r」になります。...標準のfopen()値に加えて、モードは「U」または「rU」の場合があります。Pythonは通常、ユニバーサルニューラインサポートを使用して構築されています。'U'を指定すると、ファイルはテキストファイルとして開きますが、行は次のいずれかで終了できます:Unixの行末規則'\ n'、Macintoshの規則'\ r'、またはWindowsの規則'\ r \n'。これらの外部表現はすべて、Pythonプログラムでは「\n」と見なされます。

つまり、を使用してファイルを開いて、消える'rU'かどうかを確認してください。\r

with open(filename, "rU") as f:
    # do your stuff here.
    ...

あなた\rの出力で消えますか?

もちろん、あなたのコードはかなり不格好に見えますが、他の人はすでにこの部分についてコメントしています。

于 2012-08-24T22:33:35.867 に答える
0

'\ r'はキャリッジリターン(http://en.wikipedia.org/wiki/Carriage_return)であり、ファイルから取得されます。

'fix'する必要のあるすべての行が実際に"Fixes:"で始まる場合、変更したいのはそれだけであることに注意してください。次のようにすることができます。

line = line[line.find('Fixes: ')+7:-1]

すべての正規表現を保存します。ただし、パフォーマンスについてはよくわかりません。そして、これはあなたの'\r'を同時に殺すべきです。

于 2012-08-24T22:48:24.443 に答える