当前位置:编程学习 > C#/ASP.NET >>

想了很久的一个正则表达式,还是问这里的人吧

不是写代码,是我想用Editplus替换掉一些文本,它也支持正则表达式,
比如我经常用SQL Server自带的SQL语句生成一些
INSERT INTO [GIS].[dbo].[GISLog]
           ([RealUser]
           ,[Opreator]
           ,[Approver]
           ,[Event]
           ,[Msg]
           ,[Memo]
           ,[Time])
     VALUES
           (<RealUser, nvarchar(20),>
           ,<Opreator, nvarchar(20),>
           ,<Approver, nvarchar(20),>
           ,<Event, nvarchar(50),>
           ,<Msg, nvarchar(max),>
           ,<Memo, nvarchar(max),>
           ,<Time, datetime,>)
我可以用Editplus的替换功能,把<替换成@,
           (@RealUser, nvarchar(20),>
           ,@Opreator, nvarchar(20),>
           ,@Approver, nvarchar(20),>
           ,@Event, nvarchar(50),>
           ,@Msg, nvarchar(max),>
           ,@Memo, nvarchar(max),>
           ,@Time, datetime,>)

但是后面的", nvarchar(20),>"部分想替换成", ",就不知道该怎么办了。我知道可以用正则表达式的,求达人帮忙写个正则表达式,我看 了规则,跟ASP.NET的正则表达式一样。 --------------------编程问答-------------------- \<([^,]*),[^,]*,\>

一起替换试试. --------------------编程问答-------------------- 用(?<=@\w+),[^,]+,>
替换成, 

注意我里面的,是英文的,不是中文的。

但其实你还需处理最后一个多出的逗号。 --------------------编程问答--------------------
            string str = @"INSERT INTO [GIS].[dbo].[GISLog]
  ([RealUser]
  ,[Opreator]
  ,[Approver]
  ,[Event]
  ,[Msg]
  ,[Memo]
  ,[Time])
  VALUES
  (<RealUser, nvarchar(20),>
  ,<Opreator, nvarchar(20),>
  ,<Approver, nvarchar(20),>
  ,<Event, nvarchar(50),>
  ,<Msg, nvarchar(max),>
  ,<Memo, nvarchar(max),>
  ,<Time, datetime,>)";
            string result = Regex.Replace(str, @"<([^,]+).*?>", "@$1");
            Console.WriteLine(result);
--------------------编程问答-------------------- 你就用Replace就可以了。
   string str2 = @"INSERT INTO [GIS].[dbo].[GISLog]
  ([RealUser]
  ,[Opreator]
  ,[Approver]
  ,[Event]
  ,[Msg]
  ,[Memo]
  ,[Time])
  VALUES
  (<RealUser, nvarchar(20),>
  ,<Opreator, nvarchar(20),>
  ,<Approver, nvarchar(20),>
  ,<Event, nvarchar(50),>
  ,<Msg, nvarchar(max),>
  ,<Memo, nvarchar(max),>
  ,<Time, datetime,>)";
            string str2Result = str2.Replace(", nvarchar(20),>",", ");
            TextBox1.Text = str2Result;
--------------------编程问答-------------------- 大侠们,我试了几个,都不行啊,不必要一次替换成成功的那样,分两次也行,
第一次,把<替换成@
第二次,把后边的替换成空,就是把下面的东东,
(@RealUser, nvarchar(20),>
  ,@Opreator, nvarchar(20),>
  ,@Approver, nvarchar(20),>
  ,@Event, nvarchar(50),>
  ,@Msg, nvarchar(max),>
  ,@Memo, nvarchar(max),>
  ,@Time, datetime,>)

替换成
(@RealUser
           ,@Opreator
           ,@Approve
           ,@Event
           ,@Msg
           ,@Memo) --------------------编程问答--------------------
引用 4 楼 qiqingli 的回复:
你就用Replace就可以了。
   string str2 = @"INSERT INTO [GIS].[dbo].[GISLog]
  ([RealUser]
  ,[Opreator]
  ,[Approver]
  ,[Event]
  ,[Msg]
  ,[Memo]
  ,[Time])
  VALUES
  (<RealUser, nvarchar(20),>
……
你这样,我还不如一行一行手动的删呢…… --------------------编程问答-------------------- 这样不行吗?
           string str = @"INSERT INTO [GIS].[dbo].[GISLog]
  ([RealUser]
  ,[Opreator]
  ,[Approver]
  ,[Event]
  ,[Msg]
  ,[Memo]
  ,[Time])
  VALUES
  (<RealUser, nvarchar(20),>
  ,<Opreator, nvarchar(20),>
  ,<Approver, nvarchar(20),>
  ,<Event, nvarchar(50),>
  ,<Msg, nvarchar(max),>
  ,<Memo, nvarchar(max),>
  ,<Time, datetime,>)";
            string result = Regex.Replace(str, @"<([^,]+)[^>]+>", "@$1");
            Console.WriteLine(result);
            /*
             INSERT INTO [GIS].[dbo].[GISLog]
  ([RealUser]
  ,[Opreator]
  ,[Approver]
  ,[Event]
  ,[Msg]
  ,[Memo]
  ,[Time])
  VALUES
  (@RealUser
  ,@Opreator
  ,@Approver
  ,@Event
  ,@Msg
  ,@Memo
  ,@Time)
             */
--------------------编程问答-------------------- 据传这里有个叫过客的,正则很牛掰 --------------------编程问答-------------------- 1
<  -->  @
2
[^,]+\s*,\s*> -- 空
3
,\) -- )
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,