为什么这个正则表达式不是这样构造的:
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
未找到
答案 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]*)
匹配除逗号或空格之外的任意数量的字符。这比.*
更具体,它会匹配太多,并迫使正则表达式引擎回溯。