.NET REGEX匹配匹配空字符串

Kev*_*v84 3 .net c# regex .net-4.0 match

我有这个

图案:

[0-9]*\.?[0-9]*
Run Code Online (Sandbox Code Playgroud)

目标:

X=113.3413475 Y=18.2054775
Run Code Online (Sandbox Code Playgroud)

我想匹配数字.它匹配http://regexpal.com/和Regex Coach 等测试软件中的find .

但是在Dot net和http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

我明白了:

Found 11 matches:

1.
2.
3.
4.
5.
6.  113.3413475
7.
8.
9.
10. 18.2054775
11.

String literals for use in programs:

C#
    @"[0-9]*[\.]?[0-9]*"
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么我得到所有这些空的比赛.

谢谢和问候,凯文

Jon*_*eet 10

是的,那将匹配空字符串.看它:

[0-9]* - zero or more digits
\.?    - an optional period
[0-9]* - zero or more digits
Run Code Online (Sandbox Code Playgroud)

一切都是可选的,所以空字符串匹配.

听起来你总是希望在某处有数字,例如:

[0-9]+\.[0-9]*|\.[0-9]+|[0-9]+
Run Code Online (Sandbox Code Playgroud)

(这里的顺序很重要,因为你希望它尽可能地采取.)

这对我行得通:

using System;
using System.Text.RegularExpressions;

class Test
{
    static void Main(string[] args)
    {
        string x = "X=113.3413475 Y=18.2054775";
        Regex regex = new Regex(@"[0-9]+\.[0-9]*|\.[0-9]+|[0-9]+");
        var matches = regex.Matches(x);
        foreach (Match match in matches)
        {
            Console.WriteLine(match);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

113.3413475
18.2054775
Run Code Online (Sandbox Code Playgroud)

无可否认,可能有更好的方法做到这一点:)