経緯
Windowsのエクスプローラから得られる
'C:\foo\bar'
といったpathをpythonで扱うためには、
'C:\foo\bar'
としなければなりませんが、手入力で修正するのは手間なので
'C:\foo\bar'
を渡すと'C:\foo\bar'
を返す関数を書きたかったのです。
TODO
- 文字列を1文字ずつリストに解体し、
'\'
を含む値に、'\'
を加えてインプレースして変更すればよいと考えました。 '\'
単体で加算しようとすると'
がエスケープされてしまうので'\'
- しかし
'C:\foo\bar'
が含むのは'\'
そのものではなく「エスケープされたf」と「エスケープされたb」です。 - また、当然ながら必ずしも「エスケープされたf」…等ではなく「エスケープされた任意の文字」を検索しなければならないので、正規表現のワイルドカードを用いることにしました。
quiquiさんより「path_pyの引数をどうやって得るか」2020/05/17 0:45 追記
python3
1raw_path = input() # 「手動」でコピペ 2path_py(raw_path)
実装、しかし...
python3
1import re 2 3def path_py(path_win): 4 fragmented = [] 5 for letter in path_win: 6 fragmented.append(letter) 7 8 regex_escape = re.compile(r'\.') # エスケープされた'\'とワイルドカード 9 10# 後略
よし、これでリストの値を順番にregex_escape.search()
してオブジェクトが!=None
なら...
アレ...?
僕が検索したかったのは任意のエスケープ文字(1文字)です。
エスケープと任意の文字(2文字)ではありません。
ましてやr'.'
(エスケープされたワイルドカード、すなわちただのピリオド1文字)でもありません。
どうすればよいのでしょう...
解決後記
pepperleafさんのご回答まんまでした。
まとめてになりますが皆様ご回答ありがとうございます。
回答3件
あなたの回答
tips
プレビュー