[解決済み】Regexで一部のグループのみを置換する。
2022-04-07 08:46:29
質問
次のような正規表現があるとします。
-(\d+)-
をC#で置き換えたいのですが、グループ1の
(\d+)
で
AA
を、得ることができる。
-AA-
今度は、それを使って置き換えています。
var text = "example-123-example";
var pattern = @"-(\d+)-";
var replaced = Regex.Replace(text, pattern, "-AA-");
しかし、私はこれがあまり好きではありません。なぜなら、もしパターンを変更して
_(\d+)_
で置換される文字列を変更する必要があります。
_AA_
これはDRYの原則に反しています。
みたいなのを探しているんです。
マッチしたテキストはそのままに、グループ1を次のように変更します。
this text
とグループ2が
another text
...
編集する
あくまで一例です。私は、上で述べたことを行うための一般的な方法を探しているだけです。
に使えるはずです。
anything(\d+)more_text
と、思いつく限りのパターンを紹介します。
グループだけを置き換えて、残りのマッチを残したいだけなんです。
どのように解決するのですか?
良いアイデアは、識別が必要であろうとなかろうと、すべてをグループ内にカプセル化することでしょう。そうすれば、置換文字列の中でそれらを使用することができます。たとえば、次のようになります。
var pattern = @"(-)(\d+)(-)";
var replaced = Regex.Replace(text, pattern, "$1AA$3");
を使うか、MatchEvaluatorを使うかです。
var replaced = Regex.Replace(text, pattern, m => m.Groups[1].Value + "AA" + m.Groups[3].Value);
もう一つの方法は、少し面倒ですが、lookbehind/lookaheadを使用することです。
(?<=-)(\d+)(?=-)
関連
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み] Vimで文字を改行で置き換える方法
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx
-
[解決済み] JavaScriptの正規表現でマッチしたグループにアクセスするにはどうすればよいですか?
-
[解決済み] 複数のスペースを1つのスペースに置き換える正規表現
-
[解決済み] Sublime Text 2での正規表現検索置換
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】 正規表現文字列のエスケープ
-
[解決済み】JavascriptをMatched Groupに置き換えると?
-
[解決済み】MySQLで正規表現による置換を行うには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Sequence contains no matching element(シーケンスにマッチする要素がない
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する
-
[解決済み] 正規表現における非捕捉グループとは何ですか?