質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

3231閲覧

stringに格納した文字列を正規表現で抽出し、抽出した文字列をリストや配列に格納する方法

doremifackyou

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2018/01/14 11:18

###前提・実現したいこと
正規表現を用いて、stringに格納された文字列の”[]”内の文字列を抽出し、リストや配列に格納したいです。またそれと同等のものならば手段を教えていただきたいです。

###発生している問題
正規表現を用いて[]内の文字は抽出できているのですが、抽出した文字列をリストや配列に格納する方法がわかりません。途中までの出力をメッセージボックスで表示してみると、一つ一つは抽出される状態です。今の状態では最後に抽出された文字列のみテキストファイルに出力されてしまいます。抽出したものを全て格納し、test.txtに出力する方法を教えていただきたいです。

###該当のソースコード

C#

1 public void button1_Click(object sender, EventArgs e) 2 { 3 if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) 4 { 5 label1.Text = openFileDialog1.FileName; 6 string AppPath0 = openFileDialog1.FileName; 7 string strDt0 = ""; 8 WordRead.RdWordText(AppPath0, out strDt0); 9 MatchCollection matchedobject = Regex.Matches(strDt0, @"[([].+?[)]]"); 10 foreach (Match m in matchedobject) 11 { 12 Console.WriteLine(m.Value); 13 //MessageBox.Show(m.Value); 14 StreamWriter sw = File.CreateText(@"E:\diff\bin\Debug\test.txt"); 15 sw.WriteLine(m.Value); 16 sw.Close(); 17 } 18 } 19 }

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

MatchCollectionが配列みたいなものですが、どのような型にしたいのでしょうか?

次にファイル出力ですが、
File.CreateTextはファイルが存在する場合、上書きされます。
ですので、

C#

1foreach (Match m in matchedobject) 2{ 3 StreamWriter sw = File.CreateText(@"E:\diff\bin\Debug\test.txt"); 4 sw.WriteLine(m.Value); 5 sw.Close(); 6}

この場合、1つの抽出された文字列を書くたびに上書きされます。
ファイルを開いた後にループして出力、ループ終了でCloseとするか
Usingステートメントのブロック内でループして出力などに変更してください。

追記:

C#

1StreamWriter sw = File.CreateText(@"E:\diff\bin\Debug\test.txt"); 2foreach (Match m in matchedobject) 3{ 4 sw.WriteLine(m.Value); 5} 6sw.Close();

もしくは

C#

1using (StreamWriter sw = File.CreateText(@"E:\diff\bin\Debug\test.txt"))) 2{ 3 foreach (Match m in matchedobject) 4 { 5 sw.WriteLine(m.Value); 6 } 7}

という感じです。

投稿2018/01/14 11:42

編集2018/01/14 12:26
YAmaGNZ

総合スコア10222

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

doremifackyou

2018/01/14 12:07

わかりやすい説明、大変ありがとうございます。 試してみます。 感謝します。
doremifackyou

2018/01/14 12:13

例えば、ファイルの中身が、 [CR-0024] 出力 [CR-0025] 検索 [CR-0026] 作成 [CR-0027] 保存 だった場合、 CR-0024 CR-0025 CR-0026 CR-0027 となるようにテキストファイルに格納されるようにしたいです。
doremifackyou

2018/01/14 12:15

現段階では、CR-0027だけがテキストファイルに上書きされるだけになってしまいます。 どうすれば抽出したものを全てテキストファイルに上書きできるでしょうか?
doremifackyou

2018/01/14 12:45

ありがとうございます。 解決できました。 大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問