1

Regex.Split()とRegex.Replace()の使用方法を知っています。ただし、交換時に特定のデータを保持する方法はありません。

String []に次のテキスト行がある場合(;ごとに分割)

「」

using system;
using system.blab;
using system.blab.blabity;

「」

トラフをループして、すべての「using」を「」に置き換えますが、たとえば、「using(。+;)」の行全体を一致させるにはどうすればよいですか。そして、次のようになります(ただし、Regex.replace( "using"、 "");) "

<using> system;
<using> system.blab;
<using> system.blab.blabity;

「」

4

4 に答える 4

3

strが現在の文字列の場合、

            string str = @"using system;
            using system.blab;
            using system.blab.blabity;";
            str = str.Replace("using ", "<using> ");
于 2012-12-11T14:29:55.350 に答える
2

正規表現でparensを使用すると、その値をグループとして保存するようにエンジンに指示されます。次に、Replaceを呼び出すときに、$nでグループを参照できます。nはグループの番号です。私はこれをテストしていませんが、次のようなものです:

Regex.Replace(input, @"^using( .+;)$", "$1");

詳細については、こちらをお読みください

于 2012-12-11T14:30:30.763 に答える
1

これでかなり近づくはずです。照合しようとしているすべての論理アイテムに名前付きグループを使用する必要があります。この例では、「using」という文字列以外のすべてを一致させようとしています。次に、表記$ {yourGroupName}を使用して、置換文字列内の一致を参照できます。入力時にコンテンツのライブマッチングを表示するRegexPixieというツールを作成したので、何が機能し、何が機能しないかを確認できます。

//the named group has the name "everythingElse"
var regex = new Regex(@"using(?<everythingElse>[^\r\n]+)");
var content = new string [] { /* ... */ };

for(int i = 0; i < content[i]; i++)
{
     content[i] = regex.Replace(content[i], "${everythingElse}");
}
于 2012-12-11T14:32:58.497 に答える
0

これは2つの答えを組み合わせたものです。単語の境界 \bをラップして単語全体の検索のみusingを実行し、正規表現を後方参照にキャプチャします$1

string str = @"using system;
using system.blab;
using system.blab.blabity;";

str = Regex.Replace(str, @"\b(using)\b", "<$1>");
于 2012-12-11T16:47:20.510 に答える