2016-06-12 16 views
1

私はre.subに代替代替パターンを提供したいと思います。python re - 代替代替パターン

re.sub(r"[A-Z]+|[a-z]+", replacementpattern, string) 

を、代わりに1つの置換パターンを提供するので、私は何とかマッチした検索パターンの代替キャッチし、代替交換パターンを提供したいと思います:

のは、私はこのように、代替案として、2つの検索パターンを持っているとしましょう。 これは可能ですか?おかげさまで

PS。ここのコードは無関係ですが、一般的な質問です。

+0

はいです。 regexpのドキュメントを読んでください。あなたはカッコをキャプチャしたいと思っています。 – spectras

+1

検索パターンのグループ化オプションを認識し、置換パターン内で\ number参照を使用しています。私は何をしたいのですか?グループ\ 1が一致した場合、文字列を 'a'に置き換え、グループ\ 2を 'b'に置き換えます。 – user2965473

答えて

1

re.sub()に関数を渡すことができます。この関数では、取得したグループに基づいて必要な値を返すことができます。説明のために簡単なコード:

>>> def fun(m): 
... if m: 
...  if m.group(1): 
...  return 'x' 
...  else: 
...  return 'y' 


>>>print re.sub(r"([A-Z]+)|([a-z]+)", fun , "ab") 

機能一致が成功し、捕捉グループに基づいfun()か否かをチェックするには、置換文字列を返します。 [A-Z]+が一致した場合、xが置換文字列であり、[a-z]+が一致し、yが置換文字列です。詳細については

re.sub(r"[A-Z]+", replacement1, string) 
re.sub(r"[a-z]+", replacement2, string) 

右、拍子抜け:doc

+0

それは完璧です、ありがとう! – user2965473

0

通常、あなたはちょうど2つの代替品を使うのでしょうか?

これは実際には代替コードよりもコードが少なく、あなたがしていることがはっきりしています。