2012-02-26 4 views
0

誰も引用符の間にすべてを得るためにPythonの正規表現を知っていますか?例えば引用符内のすべてを取得する正規表現を書く方法

、テキスト:「ここにいくつかのテキスト」....テキスト:...テキスト:「といくつかの数字 - ここ2343-すぎ」

テキストである「ここで複数のテキスト!」長さが異なり、句読点や数字も含まれています。すべての情報を抽出する正規表現を作成するにはどうすればよいですか?私は、コンパイラで見たいものを

いくつかのテキストをここに よりここ 内のテキストといくつかの数字 - 2343 - ここでは、あまりにも

答えて

7

これはあなたのために働く必要があります。

"(.*?)" 

*の後に?を配置すると、可能な限り一致しないように制限されます。したがって、引用符は使用されません。

>>> r = '"(.*?)"' 
>>> s = 'text: "some text here".... text: "more text in here!"... text:"and some numbers - 2343- here too"' 
>>> import re 
>>> re.findall(r, s) 
['some text here', 'more text in here!', 'and some numbers - 2343- here too'] 
7

""でfollowe "ではありません0個以上の項目が続き、あること"[^"]*"をお試しください。 ので:

pat = re.compile(r'"[^"]*"'). 
+0

私はカールの答えが私よりも好きです。ありがとう、カール – Pierce

1

引用符で囲まれた部分文字列がエスケープ文字が含まれていない一致する場合には、カール・バーカーさんとピアースの両方の答え意志の両方の試合は正しく。しかし、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を参照してください。これらのさまざまな機能的に同一の表現が比較されます。

関連する問題