引用符で囲まれた部分文字列がエスケープ文字が含まれていない一致する場合には、カール・バーカーさんとピアースの両方の答え意志の両方の試合は正しく。しかし、2つの、ピアースの式は、より効率的である:
reobj = re.compile(r"""
# Match double quoted substring (no escaped chars).
" # Match opening quote.
( # $1: Quoted substring contents.
[^"]* # Zero or more non-".
) # End $1: Quoted substring contents.
" # Match closing quote.
""", re.VERBOSE)
しかし、引用符で囲まれた部分文字列が一致する場合DOESは例えば(エスケープ文字を含む「彼女は言った:\」こんにちは\」私に\ n個。 「)、その後、別の表現をする必要があります:
reobj = re.compile(r"""
# Match double quoted substring (allow escaped chars).
" # Match opening quote.
( # $1: Quoted substring contents.
[^"\\]* # {normal} Zero or more non-", non-\.
(?: # Begin {(special normal*)*} construct.
\\. # {special} Escaped anything.
[^"\\]* # more {normal} Zero or more non-", non-\.
)* # End {(special normal*)*} construct.
) # End $1: Quoted substring contents.
" # Match closing quote.
""", re.DOTALL | re.VERBOSE)
あり、私はトリックを行うだろうことを知ってるいくつかの表現がありますが、上記(MRE3から取られたもの)束の最も効率的です。 my answer to a similar questionを参照してください。これらのさまざまな機能的に同一の表現が比較されます。
私はカールの答えが私よりも好きです。ありがとう、カール – Pierce