我有一些XML,看起來像: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>
但其地址2是可選的,所以這也是有效的:
<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代碼段)
我有一個正確匹配指定地址2當下面的正則表達式:
<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>)?
相匹配,並填充參考,名稱和地址1兩個XML片段,但留下地址2在這兩種情況下的空白,而不是對上城街道的值地址2爲第一個片段。
另外:我知道使用XML解析器可能會更容易,但XML不乾淨,這應該是一個快速和簡單的解決方案(!)。我也知道,我可以將其分解成一組要解決的正則表達式,但現在這已成爲一個智力挑戰。我很想有一個解決方案。
謝謝Alan。 | |好點性格,謝謝你的選擇。感謝您解釋清楚的答案。 – Jane 2013-03-28 09:10:28