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

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

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

正規表現でテキストの整形

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

■87969 / inTopicNo.1)  正規表現でテキストの整形
  
□投稿者/ 正規表現 (1回)-(2018/07/21(Sat) 12:33:27)

分類:[C#] 

C#の正規表現を使って次のようなテキストをカンマ区切りのテキストにしたいのですが、どうすればいいかわかりません。
今回は手でひとつひとつ整形したのですが、正規表現なら一括でできるのにと悔しい思いで投稿しました。
どのような正規表現を使えばよかったのでしょうか。

整形前
Republic_of_Iceland : アイスランド; //アイスランド共和国
Ireland : アイルランド; //アイルランド
Azerbaijan_Republic : アゼルバイジャン; //アゼルバイジャン共和国
Islamic_State_of_Afghanistan : アフガニスタン; //アフガニスタン
United_States_of_America : 米国; //アメリカ合衆国
Democratic_People'_s_Republic_of_Algeria : アルジェリア; //アルジェリア民主人民共和国
Argentine_Republic : アルゼンチン共和国; //アルゼンチン共和国
Republic_of_Albania : アルバニア; //アルバニア共和国
Republic_of_Armenia : アルメニア; //アルメニア共和国
Republic_of_Angola : アンゴラ; //アンゴラ共和国
...略...

整形後
Republic_of_Iceland,アイスランド,アイスランド共和国
Ireland,アイルランド,アイルランド
Azerbaijan_Republic,アゼルバイジャン,アゼルバイジャン共和国
Islamic_State_of_Afghanistan,アフガニスタン,アフガニスタン
United_States_of_America,米国,アメリカ合衆国
Democratic_People'_s_Republic_of_Algeria,アルジェリア,アルジェリア民主人民共和国
Argentine_Republic,アルゼンチン共和国,アルゼンチン共和国
Republic_of_Albania,アルバニア,アルバニア共和国
Republic_of_Armenia,アルメニア,アルメニア共和国
Republic_of_Angola,アンゴラ,アンゴラ共和国
...略...
引用返信 編集キー/
■87970 / inTopicNo.2)  Re[1]: 正規表現でテキストの整形
□投稿者/ 正規表現 (2回)-(2018/07/21(Sat) 12:39:52)
整形前のテキストの間の半角スペースが投稿後に消えていたので「|」に直して投稿し直します。
整形前
Republic_of_Iceland||||||||||||||||:|アイスランド;|||||||||||||//アイスランド共和国
Ireland||||||||||||||||||||||||||||:|アイルランド;|||||||||||||//アイルランド
Azerbaijan_Republic||||||||||||||||:|アゼルバイジャン;|||||||||//アゼルバイジャン共和国
Islamic_State_of_Afghanistan|||||||:|アフガニスタン;|||||||||||//アフガニスタン
United_States_of_America|||||||||||:|米国;|||||||||||||||||||||//アメリカ合衆国
Democratic_People'_s_Republic_of_Algeria||||:|アルジェリア;|||||||||||||//アルジェリア民主人民共和国
Argentine_Republic|||||||||||||||||:|アルゼンチン共和国;|||||||//アルゼンチン共和国
Republic_of_Albania||||||||||||||||:|アルバニア;|||||||||||||||//アルバニア共和国
Republic_of_Armenia||||||||||||||||:|アルメニア;|||||||||||||||//アルメニア共和国
Republic_of_Angola|||||||||||||||||:|アンゴラ;|||||||||||||||||//アンゴラ共和国

整形後
Republic_of_Iceland,アイスランド,アイスランド共和国
Ireland,アイルランド,アイルランド
Azerbaijan_Republic,アゼルバイジャン,アゼルバイジャン共和国
Islamic_State_of_Afghanistan,アフガニスタン,アフガニスタン
United_States_of_America,米国,アメリカ合衆国
Democratic_People'_s_Republic_of_Algeria,アルジェリア,アルジェリア民主人民共和国
Argentine_Republic,アルゼンチン共和国,アルゼンチン共和国
Republic_of_Albania,アルバニア,アルバニア共和国
Republic_of_Armenia,アルメニア,アルメニア共和国
Republic_of_Angola,アンゴラ,アンゴラ共和国
引用返信 編集キー/
■87971 / inTopicNo.3)  Re[2]: 正規表現でテキストの整形
□投稿者/ サメ (4回)-(2018/07/21(Sat) 12:48:38)
No87970 (正規表現 さん) に返信

↓これでどうかしら、これを,に置換したら良さそう
( +: )|(; +//)

引用返信 編集キー/
■87972 / inTopicNo.4)  Re[2]: 正規表現でテキストの整形
□投稿者/ WebSurfer (1561回)-(2018/07/21(Sat) 13:21:59)
No87970 (正規表現 さん) に返信
> 整形前のテキストの間の半角スペースが投稿後に消えていたので「|」に直して投稿し直します。

| は半角スペースという意味、すなわち以下の文字列ということでいいのであれば、

string text =
    "Republic_of_Iceland                : アイスランド;             //アイスランド共和国\r\n" +
    "Ireland                            : アイルランド;             //アイルランド\r\n" +
    "Azerbaijan_Republic                : アゼルバイジャン;         //アゼルバイジャン共和国\r\n" +
    "Islamic_State_of_Afghanistan       : アフガニスタン;           //アフガニスタン\r\n" +
    "United_States_of_America           : 米国;                     //アメリカ合衆国\r\n" +
    "Democratic_People'_s_Republic_of_Algeria    : アルジェリア;             //アルジェリア民主人民共和国\r\n" +
    "Argentine_Republic                 : アルゼンチン共和国;       //アルゼンチン共和国\r\n" +
    "Republic_of_Albania                : アルバニア;               //アルバニア共和国\r\n" +
    "Republic_of_Armenia                : アルメニア;               //アルメニア共和国\r\n" +
    "Republic_of_Angola                 : アンゴラ;                 //アンゴラ共和国";

以下のようにすれば、

string pattern = "( *: )|(; *//)";
Regex rgx = new Regex(pattern);
string outputStr = rgx.Replace(text, ",");

Console.WriteLine(outputStr);

結果は以下の通りとなります。

Republic_of_Iceland,アイスランド,アイスランド共和国
Ireland,アイルランド,アイルランド
Azerbaijan_Republic,アゼルバイジャン,アゼルバイジャン共和国
Islamic_State_of_Afghanistan,アフガニスタン,アフガニスタン
United_States_of_America,米国,アメリカ合衆国
Democratic_People'_s_Republic_of_Algeria,アルジェリア,アルジェリア民主人民共和国
Argentine_Republic,アルゼンチン共和国,アルゼンチン共和国
Republic_of_Albania,アルバニア,アルバニア共和国
Republic_of_Armenia,アルメニア,アルメニア共和国
Republic_of_Angola,アンゴラ,アンゴラ共和国

引用返信 編集キー/
■87973 / inTopicNo.5)  Re[2]: 正規表現でテキストの整形
□投稿者/ WebSurfer (1562回)-(2018/07/21(Sat) 13:37:22)
No87970 (正規表現 さん) に返信

【追伸】

自分としては一番分かりやすかった正規表現の記事を紹介しておきます。

ASP.NET の正規表現
https://msdn.microsoft.com/ja-jp/library/ms972966.aspx

ASP.NET の・・・と言うタイトルがついていますが、「ASP.NET での検証」のセクション
以外は .NET アプリで共通です。

量指定子を、サメさんが書いた + にするか、私が書いた * にするかは条件次第です。
違いは上に紹介した記事を読んでください。

引用返信 編集キー/
■87977 / inTopicNo.6)  Re[3]: 正規表現でテキストの整形
□投稿者/ 正規表現 (3回)-(2018/07/21(Sat) 17:23:29)
WebSurferさん、サメさんありがとうございます。

動作確認しました。

URLの紹介ありがとうございます。
*が0回以上、+が1回以上なのですね。

正規表現は今回のことに限らず、使いたい場面がいろいろ出てくるので
この機会に今後活用できるように勉強したいと考えています。

解決済み
引用返信 編集キー/

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


トピック内ページ移動 / << 0 >>

このトピックに書きこむ