重複の可能性:
Python正規表現-ワイルドカード式から複数のグループをキャプチャする方法は?
グループ一致のPython正規表現
私はこれを行うためのより良いまたはより簡単な方法があることを知っていますが、私がそれを自分で試したがうまくいかなかったので、なぜ私は興味があるので、ここに問題があります:
正規表現を使用してXml属性を取得したいとします。次のXMLノードを見てみましょう。
<?xml version="1.0" encoding="UTF-8"?>
<Node key1="val1" key2="val2">
<OtherNode>
<!-- something -->
</OtherNode>
</Node>
を解析するNode
にOtherNode
は、次の正規表現があります。
import re
pattern=re.compile
('\s*?<(?P<key>[\w\d]+?)
\s*?(?P<meta>(?P<metakey>[\w:]+?)="(?P<metavar>.+?)"\s*)*>')
の出力pattern.findall(xml)
は次のとおりです。
('Node'、'key2 = "val2"'、'key2'、'val2')('OtherNode'、''、''、'')
およびの出力[m.groupdict() for m in pattern.finditer(xml)]
:
{'metakey': 'key2', 'meta': 'key2="val2"', 'metavar': 'val2', 'key': 'Node'}
{'metakey': None, 'meta': None, 'metavar': None, 'key': 'OtherNode'}
最後のメタバーのみがグループとしてアクセスできるようです。
key1
同様にどのように一致させるのkey2
ですか?複数のグループを(...)*
構成と一致させることはできませんか?言い換えると、正規表現がmeta
存在する場合は、指定されたグループと複数回一致するようにします。