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

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

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

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

正規表現

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

719閲覧

Unity(C#)の正規表現によるstringの分け方について

kenji007

総合スコア22

C#

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

正規表現

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/08/09 07:15

Unityでキャラクターに喋らせたいと思っています。
受け取るデータはString型でその中に[]にキャラ名とそのセリフが入っています。
基本的に「[キャラ名]セリフ」となっていますが、「[キャラ名A]セリフ1[キャラ名B]セリフ2」このように複数受け渡される場合もあります。

<例1>
[中島]磯野野球やろうぜ!\r\n出来るか?

<例2>
[中島]磯野野球やろうぜ!\r\n出来るか?\r\n[磯野]今行くー!

上記の文章を
キャラクター用のCharacterListとセリフ用のMessageListに格納したいと思っています。
(格納先の型にこだわりは無いので配列やMatch配列(?)でも大丈夫です)

<例1>
CharacterList
・中島
MessageList
・磯野野球やろうぜ!\r\n出来るか?

<例2>
CharacterList
・中島
・磯野
MessageList
・磯野野球やろうぜ!\r\n出来るか?
・今行くー!

上記のように分けたいのですが、正規表現がいかんせん苦手で困っております。
どなたかご助力いただけますと助かります。

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

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

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

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

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

YAmaGNZ

2021/08/09 12:17

キャラクター名や台詞の中に[]はあるのですか?
kenji007

2021/08/09 12:49

ありがとうございます、今の所[]が入る想定はないので問題ございません!
guest

回答2

0

ベストアンサー

キャラクター名や台詞に[]がないのであれば、正規表現を使わずとも

C#

1var messagedata = "[中島]磯野野球やろうぜ!\r\n出来るか?\r\n[磯野]今行くー!"; 2var result = messagedata.Split('[',']'); 3 4// result[0] = "" 5// result[1] = "中島" 6// result[2] = "磯野野球やろうぜ!\r\n出来るか?\r\n" 7// result[3] = "磯野" 8// result[4] = "今行くー!"

と分割できます。

投稿2021/08/09 12:26

YAmaGNZ

総合スコア10294

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

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

kenji007

2021/08/09 12:50

回答有り難うございます。 正規表現で対応しないといけないという固定概念でやってましたが、おっしゃっている通りSplitで分解すればよいだけでした! この方法なら理論も実装もわかるので凄く助かりました!
guest

0

正規表現を使う必要はありません。
文字列をそれぞれの要素から組み合わせて結合すれば良いだけですから、Enumerable.ZipString.Join を使いましょう。

C#

1var zipped = CharacterList.Zip(MessageList, (character, message) => $"[{character}]{message}"); 2var joined = string.Join("",zipped); 3Console.WriteLine(joined);

投稿2021/08/09 09:39

編集2021/08/09 09:49
BluOxy

総合スコア2663

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

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

YAmaGNZ

2021/08/09 12:10

変換が逆では?
kenji007

2021/08/09 12:49

ありがとうございます! 見たことのないやり方だったので試してみて覚えようと思います!
BluOxy

2021/08/09 13:31

すみません。こちらは逆でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問