无法理解为什么正则表达式不适用于字符串的开始/结束标记

时间:2016-07-27 14:18:08

标签: c# .net regex c#-3.0

这是我的测试正则表达式,包含IgnoreCase和Singleline选项:

  

^\s*((?<test1>[-]?\d{0,10}.\d{3})(?<test2>\d)?(?<test3>\d)?){1,}$

并输入数据:

      24426990.568   128364695.70706     -1288.460

如果我省略 ^ (匹配行首)和 $ (匹配行尾)

  

\s*((?<test1>[-]?\d{0,10}.\d{3})(?<test2>\d)?(?<test3>\d)?){1,}

然后一切都很完美。

为什么它不能用于字符串开始/结束标记(^ / $)?

提前致谢。

1 个答案:

答案 0 :(得分:3)

The start and end is literally the start and end of the input string when in single line mode. It only means the start of the line and the end of the line in multiline mode.

请注意,这表示整个输入字符串。

所以如果你使用:

      24426990.568   128364695.70706     -1288.460

作为输入字符串,则开头是第一个空格,字符串的结尾将是0

由于您的模式恰好匹配您正在寻找的一个实例,因此与^和$一起使用时,正则表达式将失败。这是因为它在输入字符串中寻找该模式的一个实例,但有三个。 您有两种选择:

  1. 删除^和$
  2. 更改模式至少匹配一次