2

我试图替换<number></number>元素中的所有数字,就xxx好像数字长度是 15 或 16。

例如<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 >,后面是 a <,使用lookaround

于 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 回答