2017-10-25 5 views
0

私はファイル内に次の行を持っています: 'some text/some/path' ここで、pathは相対パスでも絶対パスでもかまいません。絶対パスで置き換えたいと思います。 私はこれを試してみました:しかし、マッチした文字列は、任意のパスとその結果の文字列なしでファイル名として見られているPython:re.sub os.path.abspathを使って

re.sub('some text (.*)','some text {}'.format(os.path.abspath(r'\1')),line) 

が /パス/に/ /ファイル//いくつかの/パスです

基本的にはそれを相対パスと絶対パスの両方に対して 'path/to/the/file /' + 'matched_string'です。 re.subの外側でos.path.abspathを使用すると、正しいパスが得られます。

どうすればこの問題を解決できますか?

おかげで、 イヴァン

+0

リテラルstrの上 ')(' ABSPATH呼び出しています'\ 1'を使用しています。おそらく 're.sub()'の結果にそれを適用したいでしょう。 – jasonharper

答えて

2

あなたはre.subへの代替としての機能を渡すと、その関数は引数としてマッチオブジェクトで呼び出されます:

#!/usr/bin/env python 

import os, re 

os.chdir('/tmp/') 
line='some text .' 

print(re.sub('some text (.*)', 
      lambda match: 'some text {}'.format(os.path.abspath(match.group(1))), 
      line)) 

...正しく出力として発します(/tmpが​​へのシンボリックリンクであるMacOSの、上):

some text /private/tmp 
+0

これはうまくいきました。 – Ivan

+0

@Ivan、聞いてうれしいです - あなたの質問を解決するために、答えの横にあるチェックボックスをクリックすることを検討してください。 –

関連する問題