|
■No85014 (夜叉丸 さん) に返信
ちょっとだけ調べてみましたが、
new RectangleF(20f, -20.856f, 100.123456789f, 50.9f);
↓↓
{X=20,Y=-20.856,Width=100.1235,Height=50.9}
という結果から、指数形式になることはない、数字として変な形(1.0.0 とか ---1 とか)
になることはない・・・とすれば、数字のところは「ハイフン、数字、ピリオドが一文字
以上」という条件のみでよさそうです。
であれば、以下のようにしてできると思います。
Rectangle re = new Rectangle(20, -20, 100, 50);
Console.WriteLine(re.ToString());
RectangleF rf = new RectangleF(20f, -20.856f, 100.123456789f, 50.9f);
Console.WriteLine(rf.ToString());
Regex regex = new Regex(@"
^ # 開始のアンカー
{X= # {X= という文字列で始まる
(?<X>[-0-9.]+) # X という名前付グループ。ハイフン、数字、ピリオドが一文字以上
,Y= # ,Y= という文字列が来る
(?<Y>[-0-9.]+) # Y という名前付グループ。ハイフン、数字、ピリオドが一文字以上
,Width= # ,Width= という文字列が来る
(?<Width>[-0-9.]+) # Width という名前付グループ。ハイフン、数字、ピリオドが一文字以上
,Height= # ,Height= という文字列が来る
(?<Height>[-0-9.]+) # Height という名前付グループ。ハイフン、数字、ピリオドが一文字以上
} # } で終わる
$ # 終了のアンカー",
RegexOptions.IgnorePatternWhitespace);
Match m = regex.Match(re.ToString());
GroupCollection g = m.Groups;
Console.WriteLine("X=" + g["X"].Value + ",Y=" + g["Y"].Value +
",Width=" + g["Width"].Value + ",Height=" + g["Height"].Value);
m = regex.Match(rf.ToString());
g = m.Groups;
Console.WriteLine("X=" + g["X"].Value + ",Y=" + g["Y"].Value +
",Width=" + g["Width"].Value + ",Height=" + g["Height"].Value);
/*
結果は:
{X=20,Y=-20,Width=100,Height=50}
{X=20,Y=-20.856,Width=100.1235,Height=50.9}
X=20,Y=-20,Width=100,Height=50
X=20,Y=-20.856,Width=100.1235,Height=50.9
*/
|