c#检查“*”是不是在字符串中重复[重复]

Posted

技术标签:

【中文标题】c#检查“*”是不是在字符串中重复[重复]【英文标题】:c# check if "*" is being repeated in a string [duplicate]c#检查“*”是否在字符串中重复[重复] 【发布时间】:2018-10-17 04:42:15 【问题描述】:

我正在尝试计算字符串中有多少个 * 符号。但是我得到一个错误。

System.dll 中出现“System.ArgumentException”类型的未处理异常

我只是使用正则表达式匹配来检查它。当我用任何其他字符串进行测试时,它工作得很好,但是当我搜索“*”时,它得到了一个例外。

这是给出表达式的代码

string abc = "i am just trying *** for a sample code";
var count = Regex.Matches(abc, "*").Count;
Console.Out.WriteLine(count);

这个效果很好

string abc = "i am just trying  for a sample code";
var count = Regex.Matches(abc, "a").Count;
Console.Out.WriteLine(count);

知道为什么吗?

【问题讨论】:

错误信息会很有帮助。 “知道为什么” - 是的,* 字符是所谓的quantifier,因此必须对其进行转义。 您确实应该在问题中引用异常的全部详细信息。在这种情况下,我假设异常消息类似于:parsing "*" - Quantifier x,y following nothing. 这是一个重复的问题,但无论如何都有答案。 【参考方案1】:

您可以改用 LINQ Count

string abc = "i am just trying *** for a sample code";
var result = abc.Count(c=>c=='*');

【讨论】:

理论上,在某些情况下(特别是如果字符串很长并且目标字符靠近开头)可以通过避免计算每一次出现并在发现重复项后立即停止来改进: bool dups = s.SkipWhile(c => c != '*').Skip(1).Any(c => c == '*');【参考方案2】:

* 是元字符,需要转义

var count = Regex.Matches(abc, @"\*").Count;

【讨论】:

【参考方案3】:

* 在正则表达式中有特殊含义,您应该使用\ 对其进行转义。试试:

var count = Regex.Matches(abc, @"\*").Count;

【讨论】:

以上是关于c#检查“*”是不是在字符串中重复[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C#使用正则表达式检查字符串中重复出现的词

在python中检查字符串是不是为数字[重复]

Python检查元组的任何项目是不是在字符串中[重复]

如何在c#中检查对象是不是没有空属性[重复]

如何在python中检查字符串是不是为空[重复]

在C#中将Char数组转换为字符串[重复]