C#中段落编号的正则表达式

Leo*_*vin 2 c# regex numbers

我正在寻找符合以下任何一项的正则表达式:

1.0
2.0
3.1
4.2.1
2.1.1.7
1.3.17.11
12.23.54.18
Run Code Online (Sandbox Code Playgroud)

嵌套/水平可能高于4级...点之间的数字可能不超过2位(最后一个样本).

我试过这个,@"\d.\d+"但在某些情况下它不起作用.

我也在寻找只与此匹配的表达式:

1.0
12.0
4.0
Run Code Online (Sandbox Code Playgroud)

这里也是 - 点之前不超过2位数.

Joe*_*oey 7

像往常一样,考虑一下你想要匹配的结构:

单个数字:

\d
Run Code Online (Sandbox Code Playgroud)

单个数量的任意长度:

\d+
Run Code Online (Sandbox Code Playgroud)

一个数字,最多约2位数:

\d{1,2}
Run Code Online (Sandbox Code Playgroud)

一个数字,后跟一个点,后跟另一个数字:

\d{1,2}\.\d{1,2}
Run Code Online (Sandbox Code Playgroud)

一个数字,后跟一个点,后跟另一个数字,然后是另一个点,接着是另一个数字:

\d{1,2}\.\d{1,2}\.\d{1,2}
Run Code Online (Sandbox Code Playgroud)

注意一个模式?确切地说,您可以使用分组和重复将该模式匹配到任意长度:

\d{1,2}(\.\d{1,2})+
Run Code Online (Sandbox Code Playgroud)

请注意,这.是正则表达式中的元字符,匹配(几乎)任何字符,因此要匹配文字点,您需要将其转义(如上所示).

要匹配两个级别的嵌套,您可以*以类似的方式约束括号后面:

\d{1,2}(\.\d{1,2}){1}
Run Code Online (Sandbox Code Playgroud)

这意味着它必须恰好匹配一次.但是,在这种情况下,您还可以简化为我们之前看到的正则表达式:

\d{1,2}\.\d{1,2}
Run Code Online (Sandbox Code Playgroud)

但是,如果要为任意n创建与n级嵌套匹配的正则表达式,那么在最后放置确切的重复次数会很有帮助.