2015-07-10 101 views
1

我想編寫一個正則表達式表示,將尋求這種模式:asdf=123,然後一旦事情是在文件/字符串中發現,它應該只是更換123部分bbbcccddd正則表達式的模式僅查找和替換部分

我該如何在C#中做到這一點?

+3

可能這個鏈接有幫助嗎? :https://msdn.microsoft.com/en-us/library/xwewhkd1(v=vs.110).aspx –

+0

請詳細說明。你的字符串/文件中的「asdf = 123」之後/之後是什麼?如果它像「asdasd____ asdf = 123 _____ asdasd」那樣是一回事,但是如果它是「zzzzzzasdf = 12309656097」 - 是不同的。如果你提供這個字符串的縮短例子,那會很好。價值觀是固定的?或者這只是你正在尋找的模式的一個例子? – Fabjan

回答

1
Console.WriteLine(Regex.Replace("11asdf=123 ttt", @"(?<=asdf=)123", "321")); 

雖然我寫這篇文章的代碼,但我認爲會有很多問題,因爲你沒有描述你的問題顯然,如果在asdf之前有一些字符不是白色,或者123之後有一些號碼,你是否還想替換123

0

你可以做一些事情,像這樣:

string pattern = "asdf=123"; 
Regex r = new Regex(@"(.*?=)(.*)"); 
Match m = r.Match(pattern); 
if(m.Success)    
     Console.WriteLine(m.Groups[1].Value + new String(m.Groups[2].Value.Reverse().ToArray())); 

,直到它找到一個組中的equals((.*?=)),並把它上面將匹配任何東西。然後它將匹配後面的內容並將其放在另一個組中((.*))。第一組然後按原樣打印,而第二組的內容顛倒。

這樣做的一個更簡潔但不夠靈活的方式是使用Regex.Replace,用類似這樣:

string pattern = "asdf=123"; 
    Console.WriteLine(Regex.Replace(pattern, @"(.*?=)(\d)(\d)(\d)", "$1$4$3$2")); 

這是不太可靠的,雖然,因爲你需要知道的數字前手的量。

編輯:按照您的編輯:

您將需要使用:Regex.Replace("asdf=123", "(.*?=)\d{3}","$1bbbcccddd")

+0

我不需要反向..任何字符串都可以在那裏 –

+1

@devhedgehog:我已經更新了我的答案。即使您的編輯完全改變了您的問題。 – npinti

+0

'。*?'部分讓我害怕大量的任意字串。 '(\ S * =)'可能會更好。 –

1
string pattern = @"asdf=123"; 
var result = Regex.Replace(yourString, pattern, "asdf=bbbcccddd"); 
+0

對於這種方法正則表達式是矯枉過正,只是string.Replace就足夠了https://msdn.microsoft.com/en-us/library/fk49wtc1(v=vs.110).aspx –