我正在尝试构建一个正则表达式,它将检查字符串是否有连字符0或1次。
所以它会返回以下字符串。
1-5
1,3-5
1,3
以下是错误的。
1-3-5
我已尝试过以下内容,但1-3-5可以正常使用
([^-]?-){0,1}[^-]
答案 0 :(得分: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
在这种情况下,您需要指定匹配输入字符串的开头(^
)和结束($
),这样就不会为像{{{{{{ 1}}。
答案 1 :(得分:5)
也许更简单:
var hyphens = input.Count(cc => cc == '-');
您的正则表达式有效,因为它找到符合您条件的连字符的第一个实例。您可以使用以下正则表达式,但这不是理想的:
^[^-]*-?[^-]*$
答案 2 :(得分:2)
如果你的字符串在一个集合中,你可以在一行LINQ中完成。它将返回一个字符串列表,其中包含少于两个连字符。
var okStrings = allStrings.Where(s => s.Count(h => h == '-') < 2).ToList();
根据您格式化字符串列表的方式来判断我假设您不能在逗号上拆分,因为它不是一致的分隔符。如果可以,那么您可以使用String.Split
方法获取每个字符串,并将上面的allStrings
变量替换为该数组。
答案 3 :(得分:0)
你可以这样接近它:
string StringToSearch = "1-3-5";
MatchCollection matches = Regex.Matches("-", StringToSearch);
if(matches.Count == 0 || matches.Count == 1)
{
//...
}
答案 4 :(得分:-2)
我刚测试了你的表情,它似乎给你想要的结果。它将1-3-5分为{1-3}和{-5}