我想匹配一個xml元素併爲可選屬性創建一個組。如果該屬性不存在,那麼我將執行一些其他操作。例如我有匹配可選捕獲組
<customer display="no">
我想匹配客戶元素,但顯示屬性可能不存在。在代碼中,我將檢查該捕獲組是否爲空,如果是這樣,請執行一些自定義邏輯。
所以正則表達式我已經是
<customer.*(display="yes|no").*?>
與元素相匹配確定,當它具有屬性,但我怎樣才能使組選,所以我可以檢查,以查看是否含有元素?
我想匹配一個xml元素併爲可選屬性創建一個組。如果該屬性不存在,那麼我將執行一些其他操作。例如我有匹配可選捕獲組
<customer display="no">
我想匹配客戶元素,但顯示屬性可能不存在。在代碼中,我將檢查該捕獲組是否爲空,如果是這樣,請執行一些自定義邏輯。
所以正則表達式我已經是
<customer.*(display="yes|no").*?>
與元素相匹配確定,當它具有屬性,但我怎樣才能使組選,所以我可以檢查,以查看是否含有元素?
你可以在組後面加一個問號,就像正則表達式的任何其他可選組件一樣。如果您這樣做,您還必須製作第一個.*
懶惰(通過添加?
),否則它將消耗整條線。
所以,你應該有這樣的事情:
<customer.*?(display="yes|no")?.*?>
還要注意的是(display="yes|no")
可能不符合你希望它是什麼:它匹配display="yes
或no"
不display="yes"
或display="no"
。我懷疑你想要(display="(?:yes|no)")
。
是的,我剛纔發現問題是第一個。*是貪婪的,應該是。*? –
試試這個正則表達式:
<customer.*?(display="(?:yes|no)").*?>
解釋:
?
匹配前面的元素零次或一次。
*?
零次或多次,但隨着幾次匹配前面的元素成爲可能。
(?: subexpression)
定義非捕獲基團。
我試過了,但是它讓比賽變得貪婪,但我只知道那是因爲第一次任何角色比賽都很貪婪。
不要使用正則表達式進行XML解析!根據你使用.NET的標籤。在.NET中,我們有XmlReader,XmlDocument和XDocument - 用於處理XML的標準類。 –