正则表达式:如何查找

时间:2013-06-17 14:17:34

标签: c# regex

为什么这个正则表达式不是这样构造的:

tmprect = string "gg_rct_MyReg1"
regex = @"^\s*set\s+"+tmprect+@"\s*=\s*Rect\s*\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*,\s**(.+)\s*\).*$";

不适合

set gg_rct_MyReg1 = Rect (-704.0 ,   -352.0, 224.0   , 448.0) //rect 1

我做错了什么?

///编辑:

string findrectcoord = @"^\s*set\s+" + tmprect + @"\s*=\s*Rect\s*\(\s*([^,\s]*)\s*,\s*([^,\s]*)\s*,\s*([^,\s]*)\s*,\s*([^)\s]*)\s*\).*$";
StreamReader file3 = new StreamReader(openFileDialog1.FileName);
string line2;
while ((line2 = file3.ReadLine()) != null)
{
    Regex foundrectr = new Regex(findrectcoord);
    Match foundrectm = foundrectr.Match(line2);
      if (foundrectm.Success)
       {
         MessageBox.Show("YES");

       }
  }

的字符串:

set gg_rct_MyReg1 = Rect( -704.0  ,  -352.0, 224.0  , 288.0 ) //JassCode

未找到

1 个答案:

答案 0 :(得分:2)

正则表达式本身虽然丑陋且低效,但应该有效。但是,在构建正则表达式之前,您需要将正在添加的字符串分配给正则表达式。虽然我们正在努力,但让我们清理一下:

string tmprect = "gg_rct_MyReg1";
Regex regexObj = new Regex(@"^\s*set\s+" + tmprect + 
                           @"\s*=\s*Rect\s*\(\s*([^,\s]*)\s*,\s*([^,\s]*)\s*,\s*([^,\s]*)\s*,\s*([^)\s]*)\s*\).*$");

([^,\s]*)匹配除逗号或空格之外的任意数量的字符。这比.*更具体,它会匹配太多,并迫使正则表达式引擎回溯。