2015-10-19 160 views
-1

任何人都可以讓我知道自己在以下情況下,正則表達式,正則表達式替換標籤在C#中的標籤?

輸入:變量:parseddata

<root> 
<A></A> 
<location> 
<city>mycity</city> 
<city1>mycity1</city1> 
<state>mystate</state> 
</location> 
<B></B> 
<root> 

替換文本:updatedLocation

<updatedlocation> 
<updatedcity>mycity</updatedcity> 
<updatedstate>mystate</updatedstate> 
</updatedlocation> 

預期輸出:

<root> 
<A></A> 
<updatedlocation> 
<updatedcity>mycity</updatedcity> 
<updatedstate>mystate</updatedstate> 
</updatedlocation> 
<B></B> 
<root> 

regexLocationPattern = ??; 在C#中,如何寫這個正則表達式,

patchedData = Regex.Replace(parseddata, regexLocationPattern, updatedLocation); 

有什麼想法?

+0

輸入,輸出,預期輸出?你有什麼嘗試? – sln

+0

http:// rubular。com/r/WL7e6YOWNM 您的替換字符串應如下所示:「 \ n $ 1 \ n $ 3 \ n」 –

回答

1

使用這樣的正則表達式:

<location>[^\0]*?<\/location> 

Regex live here.

+0

這有什麼用? –

+0

@JavierBuzzi。他想用''替換''內容。我錯了嗎? – 2015-10-19 16:22:25

+0

「WITH」裏面的數據。我這樣做:rubular.com/r/WL7e6YOWNM,但我不知道足夠的C#給OP一個完整的答案。但看看如何提取值? –

1

這應該工作:

var input = @"<root>\n<A></A>\n<location>\n<city>mycity</city>\n<city1>mycity1</city1>\n<state>mystate</state>\n</location>\n<B></B>\n<root>"; 
var replacement = @"<updatedlocation>\n<updatedcity>${city}</updatedcity>\n<updatedstate>${state}</updatedstate>\n</updatedlocation>"; 
var regex = new Regex(@"(?sn)<location>(\r?\n)*((<city>(?<city>.*?)</city>)|(<city1>(?<city1>.*?)</city1>)|(<state>(?<state>.*?)</state>)|\r?\n)+</location>"); 

var result = regex.Replace(input, replacement); 

正則表達式搜索是:

(?s)<location>(\r?\n)((<city>(?<city>.*?)</city>)|(<city1>(?<city1>.*?)</city1>)|(<state>(?<state>.*?)</state>)|\r?\n)+</location> 

更換是:

<updatedlocation> 
<updatedcity>${city}</updatedcity> 
<updatedstate>${state}</updatedstate> 
</updatedlocation> 

DEMO

0

我有這個企圖取代任何位置標籤內的數據與updatedLocation數據進行替換。

var regexLocationPattern = @"<location.*</location>"; 

patchedData = Regex.Replace(parseddata, regexLocationPattern, updatedLocation); 

我得到的輸出,

<root> 
    <A></A> 
    <updatedlocation> 
    <updatedcity>mycity</updatedcity> 
    <updatedstate>mystate</updatedstate> 
    </updatedlocation> 
    <B></B> 
    <root> 

請讓知道是否有任何問題嗎?

(忽略新線的情況下)

0

希望你不會被強迫使用正則表達式,正則表達式會和XML不在一起工作得很好。我寧願一個XML解析器,這使得代碼有點長,但更具可讀性和可維護性:

var parsedData = Properties.Resources.Content; 
var document = XDocument.Parse(parsedData); 
var root = (XElement)document.FirstNode; 

var location = root.Element("location"); 
location.Name = "updatedLocation"; 

location.Element("city1").Remove(); 

var city = location.Element("city"); 
city.Name = "updatedCity"; 

var state = location.Element("state"); 
state.Name = "updatedState"; 

var result = document.ToString(); 

內的一些無效支票丟失的代碼,但你應該如何操作理念XML的東西。

還有一個附註: 在給出的示例中,數據是錯誤的。最後一個節點root缺少斜槓,這使得它成爲非法的xml文檔。希望這只是您網站的錯字,而不是收到的數據中的錯誤。