2015-07-10 102 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 –