2017-06-08 9 views
-1

私は、Python 3に以下のような何かをしたいと思います:if文で代入を使用することはできますか?

import re 

s = "abcde" 

if match = re.search("abc(de)", s): 
    print(match.group(1)) 
elif match = re.search("abc(fg)", s): 
    print(match.group(1)) 
elif match = re.search("abc(hi)", s): 
    print(match.group(1)) 
... 

しかし、Pythonはif書と上記のコードの条件句の割り当てが実行できないことはできません。

エラーを発生させることなくこの目標を達成するにはどうすればよいですか?前もって感謝します。

+0

条件付きで一致するように割り当てます –

+1

基本的に問題は、代入文がPythonでは*式ではなく、何かに評価されないということです。これはCと違っています。 –

答えて

3

これを実行するためのより良い方法で正規表現パターンを表現できます。以下のような

何か:

match = re.search("abc(de|fg|hi)", s) 

if match: 
    print(match.group(1)) 

あなたの正規表現パターンは、やや複雑な場合は、パターンをループ個別に一致してチェックすることができます:Pythonで

patterns = [r"abc(de)", r"abc(fg)", r"abc(hi)"] 

for pattern in patterns: 
    match = re.search(pattern, s) 
    if match: 
     print(match.group(1)) 
+0

ありがとうございます。あなたのソリューションはきれいで清潔です。それは私に大きな洞察を与えます。 –

0

を、いや、あなただけのことができますifステートメントで式を使用してください。しかし、あなたはあなたが本当にそれをしたい場合は委任することができます。

import re 

_delegate = None 
def delegate_search(pattern=None, data=None): 
    global _delegate 
    if pattern is None: 
     delegate = _delegate 
     _delegate = None 
     return delegate 
    _delegate = delegate = re.search(pattern, data) 
    return delegate 

s = "abcde" 

if delegate_search("abc(de)", s): 
    print(delegate_search().group(1)) 
elif delegate_search("abc(fg)", s): 
    print(delegate_search().group(1)) 
elif delegate_search("abc(hi)", s): 
    print(delegate_search().group(1)) 

をそして、あなたも、あなたが関数を呼び出していないかのように見えるようにするいくつかの魔法を使用することができますが、それはそれ、これを使用するだけで愚かです方法。

+0

ありがとうございます。あなたの解決策は私が元々望んでいたものに最も近いものですが、あなたが言及したように少し面倒です。とにかく、これも素晴らしい考えです。 –

関連する問題