Python 正規表現を使用して、文字区切り文字列の最初のトークンを取得しようとしています。バックスラッシュ付きのセパレーターを実際のセパレーターとして扱いたくないので、否定の後読みアサーションを使用しています。セパレータがカンマの場合は問題なく動作します。
>>> import re
>>> re.match("(.*?)(?<!\\\\),.*", "Hello\, world!,This is a comma separated string,Third value").groups(1)[0]
'Hello\\, world!'
一方、コンマをアポストロフィに置き換えたまったく同じコードはまったく機能しません。
>>> import re
>>> re.match("(.*?)(?<!\\\\)'.*", "Hello\' world!'This is an apostrophe separated string'Third value").groups(1)[0]
'Hello'
>>>
私はpython 2.7.2を使用していますが、Python 3でも同じ動作をしています(Ideoneでテスト済み)。Python re documentationは、それが特殊文字であることを示していない'
ので、なぜ私の'
扱いが異なるのでしょうか?
(コメントはお控えください。アポストロフィで区切られたファイルを必要とする人はいません。まあ...私はそうします...)