正则表达式匹配字符串中的连字符0或1次

g.t*_*w.d 4 c# regex

我正在尝试构建一个正则表达式,它将检查字符串是否有连字符0或1次.

所以它会返回以下字符串就好了.

1-5
1,3-5
1,3
Run Code Online (Sandbox Code Playgroud)

以下是错误的.

1-3-5
Run Code Online (Sandbox Code Playgroud)

我尝试了以下内容,但是1-3-5这样很好:

([^-]?-){0,1}[^-]
Run Code Online (Sandbox Code Playgroud)

Fis*_*rdo 10

这有效:

^[^-]*-?[^-]*$
^^    ^ ^    ^
||    | |    |
||    | |    |-- Match the end of string
||    | |------- Match zero or more non-hyphen characters
||    |--------- Match zero or one hyphens
||-------------- Match zero or more non-hyphen characters
|--------------- Match the beginning of string
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您需要指定匹配输入字符串的begin(^)和end($),这样就不会像字符串那样获得多个匹配项1-3-5.


use*_*116 5

也许更简单的事情:

var hyphens = input.Count(cc => cc == '-');
Run Code Online (Sandbox Code Playgroud)

你的正则表达式有效,因为它找到了符合你标准的连字符的第一个实例.您可以使用以下正则表达式,但它不是理想的:

^[^-]*-?[^-]*$
Run Code Online (Sandbox Code Playgroud)