有如下字符传 char 10 Not Null int 4 Null pic 20 Not Null 如何用正则转为
char(10) Not Null,int,pic Not Null
高手求解

解决方案 »

  1.   

    你说的正规表达试有点难度,想了好多写不出来
    这里有个专门介绍正规表达试,你看看
    http://blog.csdn.net/niwalker/archive/2004/07/09/38083.aspx
      

  2.   

    搂住再详细说下你的规律下面这个对你给的例子起作用
    string content="char 10 Not Null int 4 Null pic 20 Not Null";
    string str2=Regex.Replace(content,@"(?<=char )(?<gChar>\d*)","(${gChar})");
    string str3=Regex.Replace(str2,@"(?<=Null )(?<gInt>int) \d* Null",",${gInt},");
    string str4=Regex.Replace(str3,@"(?<=pic )\d*","");
    Console.WriteLine(str4);
      

  3.   

    定字符或转义序列 含义 样例  匹配的样例 
    ^  输入文本的开头 ^B  B,但只能是文本中的第一个字符 
    $  输入文本的结尾 X$ X,但只能是文本中的最后一个字符 
    .  除了换行字符(\n)以外的所有单个字符 i.ation isation、ization 
    *  可以重复0次或多次的前导字符 ra*t rat、raat等 
    +  可以重复1次或多次的前导字符 ra+t rt、rat、raat等 
    ? 可以重复0次或1次的前导字符 ra?t  只有rt和rat匹配 
    \s  任何空白字符  \sa  [space]a,\ta,\na(\t和\n与C#的\t和\n含义相同) 
    \S  任何不是空白的字符 \SF aF,rF,cF,但不能是\tf 
    \b  字边界 ion\b 以ion结尾的任何字 
    \B  不是字边界的位置  \BX\B  字中间的任何X 
      

  4.   

    不知道仅用正则表达式的话怎样实现,不过下面这个结合其他的一些手段实现了,搂主自己优化一下:Regex regex = new Regex(@"(?<type>[^ ]*?) (?<length>\d+)( (?:Null)|(?<property> Not Null))", RegexOptions.IgnoreCase);string output = regex.Replace(@"char 10 Not Null int 4 Null pic 20 Not Null", @"${type}(${length})${property},");string[] ss = {"int", "pic"};
    string pattern = "(";foreach(string s in ss)
    {
    pattern += s + "|";
    }pattern = pattern.TrimEnd("|".ToCharArray()) + @")\(\d+\)";
    Regex regex2 = new Regex(pattern, RegexOptions.IgnoreCase);output = regex2.Replace(output, "$1").TrimEnd(",".ToCharArray());MessageBox.Show(output);
      

  5.   

    感谢楼上的诸位达人,规律是这样的,我能从一个表格中得到一个字符串。
    字符串是按照 { 列名 数据类型 长度 是否为空 } 这个顺序得到的 我想利用这个字符串动态创建一个数据库的表,所以想用正则表达式 得到如:CreateTable 表名(列名 数据类型 (长度|可选)是否为空(|可选),列名 数据类型)这样的字符串,例:CreateTable test(test Char(8) not null,test1 int)再次感谢诸位大人,其实如果要解决这个问题,最简单的方法是,先创建一个空表,再用循环增加列,但没什么挑战性。最近学习正则,所以向各位正则达人请教一下,如何用正则直接得到我想要的字符串。今天下班来结贴,不知道。还有没有达人教小弟一下。