■■■ 罠 ■■■
末尾という言葉に油断していると以下の様な罠にはまります。r"c:\aaa\b.txt".replace(r"\","/")
は「SyntaxError: EOL while scanning string literal」とエラーが出ます。
つまり「文法誤り:文字列の末端(")を探していたら文末(End Of Line)に来ちゃったよ」と怒られます。
下に続く・・・
スポンサードリンク
■■■ 理由 ■■■
実は「"\"」の\によって\の後ろの「"」が正規表現的にエスケープされることで、前の「"」のペアとして認識されなくなり、Python側からは文字列が「"」で閉じられていない、と認識されてしまうのです(raw文字の仕様としてオカシイと思いますが・・・)。このように"\"の様に1文字のみの文字列も末尾が\(バックスラッシュ)になるので罠にかかるのです。
よって「r"\"」を「"\\"」と取り換えて
r"c:\aaa\b.txt".replace("\\","/")
は「'c:/aaa/b.txt'」と正しく置換されました。
下に続く・・・
スポンサードリンク
■■■ 同様の罠■■■
ちなみに上記replaceメソッド以外にもrepr関数でも生じます。repr("\") >> SyntaxError: EOL while scanning string literal
公式ドキュメントhttps://docs.python.org/ja/3/library/re.html?highlight=match%20start
では「ごく単純な表現以外は、全て raw 文字列を使うことを強く推奨します。」
とか書かれていますが、どうでしょうか? 私は危険な気がします。
あと、文字コードの違いでWindowsとMacでも面倒な事が有るので、replaceメソッドではなく、関数re.subを使った方が良いらしいです。
https://dianxnao.com/python%EF%BC%9A%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%AE%E5%8D%8A%E8%A7%92%EF%BF%A5%E3%83%9E%E3%83%BC%E3%82%AF%E3%82%92%E7%BD%AE%E3%81%8D%E6%8F%9B%E3%81%88%E3%82%8B%E6%96%B9%E6%B3%952%E7%A8%AE%E9%A1%9E/
(コメントされる場合はコメントの最初にjjjjと入れて下さい。無い場合はスパムとみなされてしまいます。 English comments will be welcomed. If you have any comments, please write 'jjjj' at first of your comments OR spam filters will delete your comments.)
スポンサードリンク