Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么Regex.Replace会给我最后一组奇怪的结果_C#_Regex - Fatal编程技术网

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必须使用它们,这样它们就不会被输出替换。