2012-08-13 72 views
0

我有一个字符串变量,下面是它的内容:正则表达式查找和替换文本

.....
DataElement deAbtVersionNum
m_AttrParent commercialcardsys :: CommercialCardInt
m_AttrGUIFieldLabel“WEX_CI 3.02.01P20.1" appsys30 :: lngDbb
m_AttrdbType “字符”
.....

正如...所示,也可能有其他文字。

在我们有“WEX_CI 3.02.01P20.1”第三行(这是从底部并在WEX ..存在开始的地方。)

我需要更换3.02.01P20.1(完全)用新版本说3.02.01P20.1.NEW

我已经能够做到这一点,使用一种肮脏的方法,寻找“Wex的索引,然后找到下一个”和等等等等。

   int start = CItext.LastIndexOf("\"WEX") + 1; 
       int end = CItext.IndexOf("\"", start); 
       string text = CItext.Substring(start, end - start + 1); 

       string[] parts = text.Split(new Char[] { ' ' }); 
       string editedText = parts[0] + " " + LabelName; 
       CItext = CItext.Replace(text, editedText); 

CIText是我必须编辑的字符串。 LabelName是我想要的字符串,而不是3.02.01P20.1

任何人都可以推荐我任何其他干净的方法吗?

+1

什么让你觉得现有的逻辑是肮脏和正则表达式干净吗? – jfs 2012-08-13 06:45:53

+0

因为它太多了。我欢迎其他方法,不一定正则表达式 – 2012-08-13 06:48:02

+0

与[String.Replace](http://msdn.microsoft.com/en-us/library/fk49wtc1.aspx)你不需要正则表达式。这会起作用吗? – Default 2012-08-13 06:48:04

回答

0

试试这个表达式

var result = Regex.Replace(text,@"(WEX_CI[\s][\da-zA-Z\.]+)","$1.NEW"); 
+0

你是否在3.02.01P20.1中添加了.NEW?我只想用3.02.01P20.1.NEW替换整个3.02.01P20.1。请更新 – 2012-08-14 07:50:24

+0

不,我不替换...但使用此代码首先它找到WEX_CI,然后用$ 1代替内容意味着3.02.01P20.1替换为3.02.01P20.1.NEW。你可以在[链接](http ://gskinner.com/RegExr/) – 2012-08-14 11:31:13

0

我认为你可以使用“向前看”的正则表达式。尝试这个。

var result = Regex.Replace(text, "(?<=WEX_CI)[^\"]+", "NEW", RegexOptions.Multiline); 
+0

我想将“WEX_CI WHATEVER”更改为“WEX_CI NEW”,您的实施是否会执行此操作?即使引号也在那里。 – 2012-08-13 08:38:54

+0

您的解决方案无效。你是否照顾过在“WEX_CI ..”之前出现的文字? – 2012-08-14 08:11:46

相关问题