正则表达式返回坏字符串

时间:2014-01-30 08:46:19

标签: c# regex

in string “< -6838.36,-6723.11,0,0>< -7091.07,-6554.64,133,0>< -368,-368,0, 1>< -400,-432,0,1>< -336,-432,0,1>< -304,-368,0,1>“

pattern1 @"\<(.*?),(.*?),(.*?),0\>";

pattern2 @"\<(.*?),(.*?),(.*?),1\>";

结果 1:“ - 6838.36”2:“ - 6723.11”3:“0,0&gt;&lt; -7091.07,-6554.64,133,0&gt;&lt; -368, -368,0"

需要 1:“ - 6838.36”2:“ - 6723.11”3:“0”

代码:

string instring = "<-6838.36,-6723.11,0,0> <-7091.07,-6554.64,133,0> <-368,-368,0,1> <-400,-432,0,1> <-336,-432,0,1> <-304,-368,0,1> ";
string myteamheroes = @"\<(.*?),(.*?),(.*?),0\>";
string enemyheroes = @"\<(.*?),(.*?),(.*?),1\>";
MatchCollection collmytmheros = Regex.Matches(instring, myteamheroes);
MatchCollection collenemytmheros = Regex.Matches(instring, enemyheroes);

var us_EN = new CultureInfo("en-US");
foreach (Match herodata in collmytmheros)
{
    String sX = herodata.Groups[1].Value;
    String sY = herodata.Groups[2].Value;
    String sR = herodata.Groups[3].Value;

    double fX = float.Parse(sX, us_EN) + 7250.0d;
    double fY = float.Parse(sY, us_EN) + 7950.0d;
    int fR = int.Parse(sR);
    // here error
    //...other code

}

foreach (Match herodata in collenemytmheros)
{
    String sX = herodata.Groups[1].Value;
    String sY = herodata.Groups[2].Value;
    String sR = herodata.Groups[3].Value;

    // MessageBox.Show("1:\"" + sX +"\"2:\"" +  sY + "?" + "\"3:\"" +  "?");

    double fX = float.Parse(sX, us_EN) + 7250.0d;
    double fY = float.Parse(sY, us_EN) + 7950.0d;

    int fR = int.Parse(sR);
    // here error
    //... other code

}

我写错了吗?

2 个答案:

答案 0 :(得分:2)

可以尝试以下正则表达式来匹配结果:

模式1

\<([-0-9.]+),([-0-9.]+),([-0-9.]+),0\>

模式2

\<([-0-9.]+),([-0-9.]+),([-0-9.]+),1\>

答案 1 :(得分:0)

我不完全确定我理解你在做什么,因此正则表达式可能不是解析数据的最佳方式。也就是说,我认为您遇到的问题是(.*?),0\>部分将超过<data>小组的结尾,并进入下一组以获得匹配。

如果你确定那里只有数字,你可以改变你的正则表达式更具体:

例如<([\d-.]+),([\d-.]+),([\d-.]+),0>(对于你的'敌人',1而不是0)。