2011-06-21 21 views
0

私はPythonで正規表現を使って遊んでいます。ここで(RegExrを通じてデバッグ)私がこれまで得てきたものだ:Pythonでグルーピングする正規表現

@@(VAR|MVAR):([a-zA-Z0-9]+)+(?::([a-zA-Z0-9]+))*@@ 

それでは、私が一致しようとしているが、このようなものです:

@@VAR:[email protected]@ 
@@VAR:param2:[email protected]@ 
@@VAR:param4:param5:param6:[email protected]@ 

基本的に、あなたはVARやMVARいずれかが続いていコロンで区切り、いくつかのパラメタ名の後に、最後の文字(@@)または別の:とパラメタを続けます。

正規表現のグループには、VAR、最初のパラメータ、最後にパラメータリストがあります(最後の例では、3番目のグループは0になります)。私はグループが(...)で作成されていることを理解していますが、正規表現が複数のグループにマッチする方法はないので、param5、param6、および0は最大3つのグループを持つのではなく、 ?

私はこの文字列に一致しなければならないことを避けたいと思っています。これは分割する必要があります:これは正規表現で行うことができると思います。おそらく私はこれに間違った方法で近づいています。

私は、後処理ではなく、マッチングプロセスで見つけて分割できるかどうかを確認しようとしています。

答えて

1

正規表現内のグループ数は固定されています。何とか後処理をする必要があります。

+0

よく、よく、その質問に答えます。正規表現で文字列を見つけ、splitを使って解析します。 – wibarr

3

この形式が固定されている場合、正規表現は必要ありません。難しくなります。ただsplit

text.strip('@').split(':') 

を使用してください。

+0

私はそうですが、正規表現の文字列は通常のテキストに散在しています。私はそれらの文字列を正規表現して解析したいと思いますが、私は分割を余儀なくされるようです。 – wibarr

+0

'@@ ... @@'文字列を取得したい場合は、正規表現マッチパターンを '@@([^ @] +)@@' – rafalotufo