2017-10-24 1 views
0

私はテキストを持っていますが、テキストは#で始まり、 ""で終わる文字列を含んでいます。 #と= ""の間にスペースがない英数字だけが存在します。 chars。 指定されたシーケンスを次のパターンで見つけようとしました#[A-Za-z0-9]+(="") 私の質問はどのように= ""文字を3つの疑問符文字で置き換えることができますか? C#で?C#でRegexとパターンを置き換える方法

ありがとうございます。

答えて

1

何が必要行うための正しい方法は、あなたが維持し、あなただけは交換する必要があるものと一致する必要がある部分をキャプチャすることです:

var result = Regex.Replace(s, "(#[A-Za-z0-9]+)=\"\"", "$1???"); 

regex demoを参照してください。 (#[A-Za-z0-9]+)=""パターンで

#および英数字文字はグループ1に取り込まれ、それ以降の交換後方参照$1(また、グループ1のプレースホルダと呼ばれる)の助けを借りて得られた文字列に再挿入されます。 =""は既知の長さの文字列なので、$1の後に3つの?文字を安全に配置することができます。

パターンを制御できず、最初のグループの内容を置き換えるだけで、グループ2の値の長さがわからない場合(一般化されます)以下のアプローチを考慮してもよい。

var s = "#Abc=\"\""; 
var result = Regex.Replace(s, "#[A-Za-z0-9]+(=\"\")", m=> 
    string.Format("{0}{1}{2}", 
     m.Value.Substring(0, m.Groups[1].Index), // Get the substring up to Group 1 value 
     new string('?', m.Groups[1].Length), // Build the string of Group 1 length ?s 
     m.Value.Substring(m.Groups[1].Index+m.Groups[1].Length, m.Value.Length-m.Groups[1].Index-m.Groups[1].Length))); // Append the rest of the match 
Console.WriteLine(result); 

this C# demoを参照してください。

関連する問題