🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

正規表現

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

Q&A

解決済

1回答

962閲覧

正規表現について一回の抽出方法

BRAK

総合スコア98

C#

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

正規表現

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

0グッド

0クリップ

投稿2020/11/25 12:19

編集2020/11/25 12:29

正規表現についてうまい抽出方法を知りたいです

C#

1コード 2 3 string str = "ああああ<r=あいさつ>挨拶</r>するよ";

この文字の中から「あいさつ」という文字と「挨拶」という文字を取り出したいのですがどちらも最後に置換を行わないと理想の処理ができないです。(「」は入らないです)うまい抽出方法があれば教えていただきたいです。

C#

1コード 2 //あいさつを取り出す 3 Match rubyMatch= Regex.Match(str, @"<r=(.+?)>", RegexOptions.Singleline); 4 5 //挨拶を取り出す 6 Match kanjiMatch = Regex.Match(str, @">(.+)<", RegexOptions.Singleline);

を今作りました。残りは置換して特定の文字を取り出しています。

C#

1コード 2 3//置換というより空白に変える 4string ruby = Regex.Replace(rubyMatch.ToString(), @"<r=(.+)>","$1",RegexOptions.Singleline); 5string kanji = Regex.Replace(kanjiMatch.ToString(), @">(.+)<", "$1", RegexOptions.Singleline);

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

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

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

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

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

guest

回答1

0

ベストアンサー

知りたい内容はこちらでしょうか

C#

1string ruby = rubyMatch.Groups[1].Value; 2string kanji = kanjiMatch.Groups[1].Value;

一行で済ませたいなら、単純に一行にまとめるか

C#

1string ruby = Regex.Match(str, @"<r=(.+?)>", RegexOptions.Singleline).Groups[1].Value; 2string kanji = Regex.Match(str, @">(.+)<", RegexOptions.Singleline).Groups[1].Value;

先読み、戻り読みを使って直接取り出すか

C#

1string ruby = Regex.Match(str, @"(?<=<r=).+?(?=>)", RegexOptions.Singleline).Value; 2string kanji = Regex.Match(str, @"(?<=>).+(?=<)", RegexOptions.Singleline).Value;

投稿2020/11/25 12:44

編集2020/11/25 13:01
actorbug

総合スコア2429

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

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

BRAK

2020/11/25 12:50

グループ化したやつだけで持っていけるんですね。 これをMatch時点で処理を一つのみでマッチのみで抽出するのは無理ですか? やはりもう一つ処理を挟む必要がありますか?
actorbug

2020/11/25 13:06

「処理を一つのみ」というのがよくわからなかったので、一行で済ます方法をいくつか追記しました
BRAK

2020/11/25 13:15

一回であいさつという文字を取り出したいという風に書きたかったです。 自分のやり方だと<>や><のマッチしてほしくない記号がマッチしてしまっていたので。
BRAK

2020/11/25 13:17 編集

特定の文字をマッチさせるためには、前の記号や後の記号を前提として使わないとマッチする文字に届かないということだとわかりました。
BRAK

2020/11/25 13:18

先読み戻り読みは初めて聞いたのでこの勉強します。これは柔軟性の高い正規表現が書けるみたいですね。
BRAK

2020/11/25 13:19

回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問