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
}
我写错了吗?
答案 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)。