1

当我执行这段代码时,我得到了一些有趣的结果。

  string readText = File.ReadAllText("d:\\temp.txt");
  Console.WriteLine(readText);

  Console.WriteLine("From File: "+Regex.Matches(readText,"$").Count);//-->2

  Console.WriteLine("Add \\n to the File: "+Regex.Matches(readText + "\n", "$").Count);//--->2
  Console.WriteLine("Add multiple \\n to the file: "+Regex.Matches(readText + "\n\n\n", "$").Count);//--->2

  Console.WriteLine("on Text \"sample\": "+Regex.Matches("sample", "$").Count);//--->1
  Console.WriteLine("on Text \"sample\\n\\n\\n\": "+Regex.Matches("sample" + "\n\n\n", "$").Count);//--->2

输出:

First line

third


Line 6
Line 7

From File: 2
Add \n to the File: 2
Add multiple \n to the file: 2
on Text "sample": 1
on Text "sample\n\n\n": 2

为什么它给我这样的结果。任何一个前飞机都可以吗?

4

1 回答 1

1

$在两个可能的位置匹配:(滚动到“以换行符结尾的字符串”部分)

  1. 在输入字符串的末尾
  2. 如果字符串以换行符结尾,则在字符串中最后一个换行符之前的位置。

因此,如果您的字符串以一个或多个换行符结尾,您将获得两个匹配项$。在其他情况下,你会得到一个。

如果您只想匹配字符串的末尾\z,请改用。

Python中的一个实验:

>>> [match.start() for match in re.finditer("$", "hello")]
[5]
>>> [match.start() for match in re.finditer("$", "hello\n")]
[5, 6]
>>> [match.start() for match in re.finditer("$", "hello\n\n")]
[6, 7]
>>> [match.start() for match in re.finditer("$", "hello\n\n\n")]
[7, 8]
于 2013-04-21T10:23:41.620 回答