2012-08-14 152 views
0

我需要一個正則表達式的字符串替換文本:需要一個正則表達式C#

string s="Insert into VERSION (ENTRYID,APPVERSION,PLATFORMVERSION,TIMESTAMPED,USERNAME,SQLSCRIPTNAME,COMMENTS)VALUES(SWS_Version_ID."NEXTVAL",'[3.02.01P20]','[4.1.38orcl]',sysdate,null,null,null);"; 

我需要在方括號NEW_VERSION更換3.02.01P20。 可以有除3.02.01P20以外的其他版本,但在該行中,我們可以看到第一個方形支架在版本後面。

也讓我知道如果它(3.02.01P20)如下所示,我會做出什麼樣的改變,比如說3打開方括號([),這樣我就不必爲每一個都寫一個單獨的問題。

+4

你有什麼試過?您可能需要查看[Expresso這樣的工具來幫助您構建和調試正則表達式](http://www.ultrapico.com/Expresso.htm)。 – 2012-08-14 07:24:35

+6

您應該使用參數綁定,而不是通過替換SQL中的變量來設置值,這會更安全。 http://stackoverflow.com/a/5943178/724944 – surfen 2012-08-14 07:25:01

+0

@GregB其實我是一個新手,甚至不知道從哪裏開始。我將下載並使用該工具玩。同時你能幫我一下嗎? – 2012-08-14 07:27:44

回答

0

試試這個:

string output = Regex.Replace(s, @"(.*'\[)(.*)(\]'.*)('\[.*)", "$1" + newVer + "$3$4"); 
+0

你的解決方案就像一個魅力! – 2012-08-14 08:37:41

+0

我很高興嘿嘿:) – Nickon 2012-08-14 08:41:59

1
using System; 
using System.Text.RegularExpressions; 
class Tester 
{ 
    public static void Main() 
    { 
     string s = "Insert into VERSION " + 
      "(ENTRYID,APPVERSION,PLATFORMVERSION,TIMESTAMPED,USERNAME,SQLSCRIPTNAME,COMMENTS)" + 
      "VALUES(SWS_Version_ID.\"NEXTVAL\",'[3.02.01P20]','[4.1.38orcl]',sysdate,null,null,null);"; 
     Match m = (new Regex("^(.*)(\\[.*?\\])(.*?)(\\[.*?\\])(.*)$")).Match(s); 
     //Console.WriteLine("{0},{1}", m.Groups[2].Value, m.Groups[3].Value); 
     string[] parts = { 
       m.Groups[1].Value, 
       m.Groups[2].Value, //[3.02.01P20] 
       m.Groups[3].Value, //',' 
       m.Groups[4].Value, //[4.1.38orcl] 
       m.Groups[5].Value //tail 
      }; 
     parts[1] = "[NEW_VERSION]"; 
     Console.WriteLine(string.Join("",parts)); 
    } 
} 

你的意思是這樣嗎?

+0

是的我是說只有這樣!但你的代碼嚇到我:) – 2012-08-14 08:37:09

+0

@Akshay你的意思是這個答案不夠好?哪部分可以改進? – bombless 2012-08-14 09:25:47

+0

答案不只是正確的,它只是代碼嚇到我:) – 2012-08-16 06:52:59