2

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は、それが特殊文字であることを示していない'ので、なぜ私の'扱いが異なるのでしょうか?

(コメントはお控えください。アポストロフィで区切られたファイルを必要とする人はいません。まあ...私はそうします...)

4

1 に答える 1