2011-01-08 6 views
1

私はこれらの投稿をすべて読んだ後で私の答えを見つけられませんでしたので、あなたのうちのひとりが重い打者の正規表現の人達が私を助けてくれることを願っています。私は、次の文字列形式からタグ名と任意の属性を特定しようとしている:属性を持つテンプレートタグの正規表現

{TAG:TYPE attr1="foo" attr2="bar" attr3="zing" attr4="zang" attr5="zoom" ...} 

注:上記の例では、TAGは常に同じになり、TYPEは、いくつかのプリセット文字列のいずれかになります(たとえば、株、プリント、ディスプレイなど)。 TAGとTYPEは大文字でしかありませんが、大文字と小文字は区別されません。

答えて

0

今のところ、属性名と値、およびTAGとTYPEは厳密に英数字であるとします。解析これらの注意事項でメシエを取得します(さらに、正規ではないかもしれない)あなたはこれらの文字列の内側に持っている」または=できれば

、ここでの仕事を取得するPythonの正規表現があります:。

>>> parse_regex=r'\{(?P<tag>\w+):(?P<type>\w+)(?P<attrs>(\s+\w+=\"\w+\")*)\}' 
>>> m = re.match(parse_regex, str) 
>>> m.group('tag') 
'TAG' 
>>> m.group('type') 
'TYPE' 
>>> m.group('attrs') 
' attr1="foo" attr2="bar" attr3="zing" attr4="zang" attr5="zoom"' 

この時点で、属性をフレンドリーなデータ構造に整理したいと思っています。それらのうちの任意のものがある可能性があるので、この段階で正規表現を使用しない方が便利です(効率的です)。

>>> [attr_str.split('=') for attr_str in m.group('attrs').split()] 
[['attr1', '"foo"'], ['attr2', '"bar"'], ['attr3', '"zing"'], ['attr4', '"zang"'], ['attr5', '"zoom"']] 
+0

ダビッドありがとう、これはとても役に立ちました!私はいくつかの小さな微調整を行い、この仕事を得ることができましたing。注:私はスペースと(。、\?;&)などのようないくつかの追加文字で属性値を説明しなければならなかった... – Funkmyer

関連する問題