2

数値の長さが15または16であるかのように、<number></number>要素内のすべての数値を置き換えようとしています。xxx

たとえば<number>1234567812345678</number>-> <number>xxx</number>

私は以下のようなことをしましたが、長さが16より大きい場合でも、数字が置き換えられます。このケースを防ぐにはどうすればよいですか。

string test = "<number>1234567812345678</number><number>12345671234567</number><number>1234567123456712345678</number>";

test = Regex.Replace(test, @"([\d]{15,16})", "xxx"); 

不要な出力

<number>xxx</number><number>12345671234567</number><number>xxx345678</number>

欲しい出力

 <number>xxx</number><number>12345671234567</number><number>1234567123456712345678</number>
4

3 に答える 3

5
string test = "<number>1234567812345678</number><number>12345671234567</number><number>1234567123456712345678</number>";

test = Regex.Replace(test, @"(?<=>)\d{15,16}(?=<)", "xxx");

これにより、ルックアラウンドを使用して、番号の前にaが付き>、その後にが続くようになります。<

于 2012-05-16T14:26:14.417 に答える
2

<number>番号の前後に。を付けるように指定していません</number>。あなたはこのようにそれを行うことができます:

test = Regex.Replace(test, @"(?<=<number>)([\d]{15,16})(?=</number>)", "xxx"); 
于 2012-05-16T14:29:57.823 に答える
1

正規表現は、文字列の終了方法を指定しない限り、デフォルトでサブ文字列を置き換えます。[\ d] {15,16}を、次のようなタグに対するマッチャーで囲む必要があります。

Regex.Replace(test, @"<number>[\d]{15,16}</number>", @"<number>xxx</number>");
于 2012-05-16T14:28:38.080 に答える