次のようなxmlがあります。
<records>
<Customer>
<Reference>123</Reference>
<Name>John Smith</Name>
<Address1>1, The street</Address1>
<Address2>Upper Town Street</Address2>
<Address3>Anytown</Address3>
<Address4>County</Address4>
<PostCode>POS TCD</PostCode>
</Customer>
</records>
ただし、 Address2 はオプションであるため、これも有効です。
<records>
<Customer>
<Reference>123</Reference>
<Name>John Smith</Name>
<Address1>1, The street</Address1>
<Address3>Anytown</Address3>
<Address4>County</Address4>
<PostCode>POS TCD</PostCode>
</Customer>
</records>
(注: これは xml スニペットを切り詰めたものです)
Address2 が指定されている場合に正しく一致する次の正規表現があります。
<Reference>(?<Reference>.*)</Reference>[\w|\W]*<Name>(?<Name>.*)</Name>[\w|\W]*<Address1>(?<Address1>.*)</Address1>[\w|\W]*<Address2>(?<Address2>.*)</Address2>
Address2 が指定されていない場合は機能しません。私が持っている最も近いものは次のとおりです。
<Reference>(?<Reference>.*)</Reference>[\w|\W]*<Name>(?<Name>.*)</Name>[\w|\W]*<Address1>(?<Address1>.*)</Address1>[\w|\W]*(<Address2>(?<Address2>.*)</Address2>)?
これは、両方の xml スニペットの Reference、Name、および Address1 に一致して入力しますが、最初のスニペットの Address 2 に Upper Town Street の値を設定するのではなく、両方のケースで Address2 を空白のままにします。
余談ですが、xmlパーサーを使用する方がおそらく簡単であることはわかっていますが、xmlはきれいではなく、これは迅速かつ簡単な解決策になるはずでした(!)。また、これを一連の正規表現に分解して解決できることもわかっていますが、これはちょっとした知的課題になっています。そして、解決策を教えていただきたいです。