2013-01-09 36 views
0

我有一個複雜的情況,我需要解析一個很長的字符串。我必須在字符串中查找一個模式,並用另一個模式替換該模式。我知道我可以簡單地使用find/replace方法,但我的情況有點不同。在C中查找替換模式#

我有一個包含以下模式

#EPB_IMG#index-1_1.jpg#EPB_IMG 


#EPB_IMG#index-1_2.jpg#EPB_IMG 


#EPB_IMG#index-1_3.jpg#EPB_IMG 


#EPB_IMG#index-1_4.jpg#EPB_IMG 

一個字符串,我希望它格式化爲

#EPB_IMG#index-1_1.jpg|index-1_2.jpg|index-1_3.jpg|index-1_4.jpg#EPB_IMG 

我不知道很多關於Regex,尋求幫助。

+1

我建議您移除此問題的標題 「正則表達式」。它假設一個可能不是最好的答案。 –

回答

6

正則表達式是矯枉過正:

var parts = s.Split(new string[] { "#EPB_IMG", "#", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries); 
var result = string.Join("|", parts); 

Console.WriteLine("#EPB_IMG#" + result + "#EPB_IMG"); // prints your result. 
0

也許是這樣的:

表達:\w+#(?<Image>(.+)\.jpg)#\w+

更換:${Image}

結果:string.Format("#EPB_IMG#{0}#EPB_IMG", string.Join("|", listOfMatches))


注: 用正則表達式測試:http://regexhero.net/tester/

結果未經測試,但應該工作!

0
var result = "#EPB_IMG" + Regex.Matches(inputString, @"#EPB_IMG(.+)#EPB_IMG") 
       .Cast<Match>() 
       .Select(m => m.Groups[1].Value) 
       .Aggregate((f, f2) => f + "|" + f2) + "#EPB_IMG";