C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

正規表現の考え方がわかりません [1]

[トピック内 28 記事 (21 - 28 表示)]  << 0 | 1 >>

■85030 / inTopicNo.21)  Re[3]: 正規表現の考え方がわかりません
  
□投稿者/ WebSurfer (1297回)-(2017/09/05(Tue) 19:27:28)
No85014 (夜叉丸 さん) に返信

Rectangle.ToString とか RectabgleF.ToString で得られた文字列から正規表現を使って X, Y, Width,
Height を取り出す必要性があるかというと、.NET アプリの世界に限れば全く完全に 100% ないと思うの
ですが・・・

プロパティとして X, Y, Width, Height が提供されているのですから、それを使えばいいのですから。

このような質問をしたのはどういう理由でしょう。教えていただけませんか? > 夜叉丸さん
引用返信 編集キー/
■85121 / inTopicNo.22)  Re[9]: 正規表現の考え方がわかりません
□投稿者/ 夜叉丸 (75回)-(2017/09/12(Tue) 09:43:41)
No85027 (ペイビン さん) に返信

> ところで、検索したいテキストは、
> X, Y, Width, Heightの順序は固定なのですよね?
> 恐らく、今回のケースでは、"{X=1, Y=2, Width=3, Height=4}"
> のパターンで事足りるのだろうと思いますが、
> もし、{Y=2, X=1, Height=4, Width=3}のようなパターンがあり得るなら、
> これも考慮する必要があります。

もともと保存される文字列は
Rectangle の ToString() での文字列です。
なので、X, Y, Width, Height だと私は思っています。

引用返信 編集キー/
■85122 / inTopicNo.23)  Re[4]: 正規表現の考え方がわかりません
□投稿者/ 夜叉丸 (76回)-(2017/09/12(Tue) 10:20:13)
No85030 (WebSurfer さん) に返信

>
> プロパティとして X, Y, Width, Height が提供されているのですから、それを使えばいいのですから。
>
> このような質問をしたのはどういう理由でしょう。教えていただけませんか? > 夜叉丸さん

Rectangle や Size を ToString() で出力されたテキスト(CSV)ファイルがあります。
このデータを自分で作ったプログラムの取り込みたいだけなのですが、
width とか , とか = で Index を使ってやろうとしていたのですが、調べていると Match というのがあるとわかって
利用しようと思ったのですが、正規表現が理解できなくて取得がうまくできなかったのです。

string 等のプロパティで X, Y, Width, Height があるのでしょうか?
それとも、ParseExact のような形で取得できるのでしょうか?



引用返信 編集キー/
■85123 / inTopicNo.24)  Re[5]: 正規表現の考え方がわかりません
□投稿者/ Hongliang (567回)-(2017/09/12(Tue) 10:38:53)
> string 等のプロパティで X, Y, Width, Height があるのでしょうか?
> それとも、ParseExact のような形で取得できるのでしょうか?

出力するときに単に
writer.WriteLine("{0},{1}", id, rect);
みたいに書き込むのではなく、
writer.WriteLine("{0},{1},{2},{3},{4}", id, rect.X, rect.Y, rect.Width, rect.Height);
みたいに出力しておけば、いちいち解析しなくて済んだって話ですね。
すでに前者のようなデータが存在する状況では今更な話ではあります。
引用返信 編集キー/
■85124 / inTopicNo.25)  Re[6]: 正規表現の考え方がわかりません
□投稿者/ 夜叉丸 (77回)-(2017/09/12(Tue) 10:48:04)
No85123 (Hongliang さん) に返信

> すでに前者のようなデータが存在する状況では今更な話ではあります。

おっしゃる通りです。
でも、私もやってしまうかもしれませんね。ToString って簡単に文字列にしてくれるし
引用返信 編集キー/
■85128 / inTopicNo.26)  Re[7]: 正規表現の考え方がわかりません
□投稿者/ 夜叉丸 (78回)-(2017/09/12(Tue) 11:49:52)
No85028 (魔界の仮面弁士 さん) に返信
> ■No85026 (WebSurfer さん) に返信
>>■No85025 (Hongliang さん) に返信
>>確かに No85016 の Hongliang さんの案が現実的だと自分も思います。
>
> 同じく一票。
>

X=(?<X>.+?) と X=(?<x>.+) は結果的に同じなのでしょうか?
? があるのとないのとでの違いが判りません。
結果は同じのように見えますが

最終的に
X=???,Y=???,Width=???,Height=???
にて、??? を取りたかっただけなので
X=(?<X>.+?) や X=(?<x>.+) で取り込めました
??? は int または float の文字列なので
float.Parse() でとれば 値は取得することが可能だと思います。

引用返信 編集キー/
■85130 / inTopicNo.27)  Re[5]: 正規表現の考え方がわかりません
□投稿者/ WebSurfer (1301回)-(2017/09/12(Tue) 12:11:35)
No85122 (夜叉丸 さん) に返信

Hongliang さんのレスとダブるところがありますが・・・

> Rectangle や Size を ToString() で出力されたテキスト(CSV)ファイルがあります。

既存の「テキスト(CSV)ファイル」があって、それを作るのは質問者さんの責任範囲外、
かつ、作る人にこのように作ってくれと注文を出せる立場にもないのであれば、今回の話
のように正規表現を使って抜き出すというのはやむを得ないと思います。

そうではなくて、質問者さんが「テキスト(CSV)ファイル」の作成方法が指定できるので
あれば、正規表現など使わなくても取得できるように、最初から「テキスト(CSV)ファイル」
の形式を考えておくべきと思います。
引用返信 編集キー/
■85131 / inTopicNo.28)  Re[8]: 正規表現の考え方がわかりません
□投稿者/ 魔界の仮面弁士 (1416回)-(2017/09/12(Tue) 12:11:56)
No85128 (夜叉丸 さん) に返信
> X=(?<X>.+?) と X=(?<x>.+) は結果的に同じなのでしょうか?
前者のグループ名は "X" ですが、
後者のグループ名は "x" ですね。

> ? があるのとないのとでの違いが判りません。
(?<X>何某) の方の "?" だとしたら、グループ名をつけるためのものです。
.+? の方の "?" だとしたら、最短一致を意味します。

string text = "X=12,Y=34,Y=56,Z=78";
var m1 = Regexes.Match(text, "Y=(?<y>.+?)");
var m2 = Regexes.Match(text, "Y=(?<y>.+)");
var m3 = Regexes.Match(text, "Y=(?<y>[^,]+)");


たとえば上記の場合、下記の結果となります。

m1[0].Groups["Y"].Captures[0].Value == "3"
m1[1].Groups["Y"].Captures[0].Value == "5"
m2[0].Groups["Y"].Captures[0].Value == "34,Y=56,Z=78"
m3[0].Groups["Y"].Captures[0].Value == "34"
m3[1].Groups["Y"].Captures[0].Value == "56"
引用返信 編集キー/

このトピックをツリーで一括表示

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ