C# 为什么Regex.Replace会给我最后一组奇怪的结果
一个简单的例子:C# 为什么Regex.Replace会给我最后一组奇怪的结果,c#,regex,C#,Regex,一个简单的例子: Regex.Replace("12345678910999999999", @"(\d{3})(\d{3})(\d{3})(\d{2})", "$1-$2-$3 $4") 这将输出到: 123-456-789 10999999999 但是为什么呢?我已经专门设置了我需要的组索引。组索引包含精确的值(在调试器中签入) 这是一把小提琴: 将字符串的其余部分与*匹配以截断它: Regex.Replace("12
Regex.Replace("12345678910999999999", @"(\d{3})(\d{3})(\d{3})(\d{2})", "$1-$2-$3 $4")
这将输出到:
123-456-789 10999999999
但是为什么呢?我已经专门设置了我需要的组索引。组索引包含精确的值(在调试器中签入)
这是一把小提琴:
将字符串的其余部分与
*
匹配以截断它:
Regex.Replace("12345678910999999999", @"^(\d{3})(\d{3})(\d{3})(\d{2}).*", "$1-$2-$3 $4")
我还将在开头添加^
,以匹配字符串的开头
请参阅。您的正则表达式只匹配并替换了字符串的“第一”部分,请将
*
添加到模式的末尾:
Regex.Replace("12345678910999999999", @"(\d{3})(\d{3})(\d{3})(\d{2}).*", "$1-$2-$3 $4"); // results in "123-456-789 10"
你期待什么?截断其余的数字?匹配它们,
@“^(\d{3})(\d{3})(\d{3})(\d{2})。*”
您只替换匹配的文本。末尾的所有9都没有被替换修改,它们是遗留下来的。我原以为最后一组只有2位数字。在本例中:123-456-789 10。小提琴包含output.Wow中的预期行。我现在明白了。Regex必须使用它们,这样它们就不会被输出替换。