2016-08-17 4 views
0

ルックバックに何かが存在するかどうかにかかわらず、値を取得できる正規表現で文字列を取得できます。 など。私が行うことができるようにしたいどのようなPython - ルックバックの文字除外と量子を使用して文字が無視されるようにする

string_1 = "this('isastring', 'secondstring')" 
    string_2 = "this(\\'issomeotherstring\\', \\'ADiffSecondString\\') 

以下の二つの文字列にかかわらず、彼らは二重のバックスラッシュを持っているか否かの2番目の文字列の引用符の内側にあるものをつかむことです。私は文字の除外と量指定子でlookbehindを使ってみましたが、lookbehindがゼロ幅でなければならないエラーがありました。ごめんなさい。

+0

は、トークンにあなたをあなたが得られるパーサを書きます必要。あなたがPyPi regexモジュールを使用することができない限り、正規表現は役に立たないでしょう。 –

+1

@Jan、怠惰なドットマッチングを使用して、エスケープシーケンスで文字列リテラルを解析することはどこにもありません。私はすでにそのルートを選択するためにあまりにも多くの下降音を持っています。がんばろう。 \ Gで文字列全体をマッチさせ、両側にアンカーしてキャプチャにアクセスしない限り、これは疑問です。 –

答えて

0

「グラブ」で、あなたはすべての文字列を見つけ意味する場合は、次のように行うことができます。

string_1 = "this('isastring', 'secondstring')" 
string_2 = "this(\\'issomeotherstring\\', \\'ADiffSecondString\\')" 

import re 

findall_str = re.compile(r"\\?'(.*?)\\?'").findall 

print(findall_str(string_1)) 
print(findall_str(string_2)) 

あなたが得られます。

['isastring', 'secondstring'] 
['issomeotherstring', 'ADiffSecondString'] 
+0

件名に関しては、実際には可変長のルックバックを行う方法がありますので、数量詞が存在する可能性がありますか?この特定の問題に対する洗練されたソリューションがありますが、今後のユースケースには当てはまりますか? –

+0

Lookbehindは固定長のパターンのみを受け入れます。代わりに、グループを使用して前/後のものを保存し、前/後の一致を保存する代替(関数付き)を実行できます。 –