2017-07-18 173 views
-3

我仍然在學習Regex所以如果我在某個地方出錯了,請幫助我。在我的項目中,我使用簡單的格式化字符串創建RichTextBlockXAML Reader。我能夠通過一些Regex模式來格式化我的字符串,現在有一個問題,即<Hyperlink />有時會被從<Paragraph>標記中排除,並且它會拋出異常。不是一個確定的正則表達式

該樣品string是:

</Paragraph> some words here (@somevaluehere1) 
       <Hyperlink NavigateUri="https://somelink.com">July 14, 2017</Hyperlink> 

我想Regex模式看出來的這場比賽:

如果<Hyperlink開始標記的</Paragraph>結束標記之後是然後用整個Hyperlink值捕獲該字符串,並將其替換爲周圍的<Paragraph> TAG。

和完成字符串應該是這樣的,但我可以使用Linq更換匹配的字符串:

</Paragraph> some words here (@somevaluehere1) 
       <Paragraph><Hyperlink NavigateUri="https://somelink.com">July 14, 2017</Hyperlink></Paragraph> 

我想知道是否有可能與Regex或理清這個問題我需要其他方法嗎?

我編制了Regex模式,但我知道這不是正確的答案。也許有經驗的人可能會在這裏幫助。

我想出的模式是:<\/Paragraph>(\s?)(\w+\s?\w+\s?)(\(?\@?\w+\)?)(\s?<Hyperlink)

+1

相反濫用正則表達式,可以[使用LINQ替換在XML中的節點(https://msdn.microsoft.com/en-us/library/bb302711(V = vs.110).aspx)。 – LukStorms

+0

爲什麼這麼多人嘗試使用Regex來解析XML? –

+1

[可以提供一些爲什麼很難用正則表達式分析XML和HTML的例子嗎?](https://stackoverflow.com/questions/701166/can-you-provide-some-examples-of-爲什麼它很難解析xml和html-with-a-reg) –

回答

0

你可以這樣說:(<\/Paragraph>.*\s*)(<Hyperlink.*)然後$1<Paragraph>$2</Paragraph>更換。

工作實施例:https://regex101.com/r/VfeTDd/3

+0

你也需要關閉它(段落) – EpicKip

+0

對不起。編輯它。 – Pedro

+0

如果在「超鏈接」和「段落」的結束標記之間存在標記,它仍然匹配。 – Ahmar

相關問題