我有一些看起来像的 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 片段的参考、名称和地址 1,但在两种情况下都将地址 2 留空,而不是第一个片段的地址 2 的值为上城街。
另外:我知道使用 xml 解析器可能会更容易,但 xml 并不干净,这应该是一个快速简单的解决方案(!)。我也知道我可以将其分解为一组正则表达式来解决,但这现在已成为一个智力挑战。我很想有一个解决方案。