您好我正在尝试使用
中的解决方案Find all pattern indexes in string in C#
但是,它在我的情况下不起作用
string sentence = "A || ((B && C) || E && F ) && D || G";
string pattern = "(";
IList<int> indeces = new List<int>();
foreach (Match match in Regex.Matches(sentence, pattern))
{
indeces.Add(match.Index);
}
它产生错误,“解析”(“ - 不够)”。
我不确定我在这里做错了什么。
感谢任何帮助。
谢谢,
Balan Sinniah
答案 0 :(得分:7)
我不确定我在这里做错了什么。
您忘记了(
在正则表达式中具有特殊含义。如果你使用
string pattern = @"\(";
我相信它应该有效。或者,只要你没有真正使用正则表达式的模式匹配,就继续使用string.IndexOf
。
如果 要使用正则表达式,我个人创建一个Regex
对象而不是使用静态方法:
Regex pattern = new Regex(Regex.Escape("("));
foreach (Match match in pattern.Matches(sentence))
...
这样,混淆的范围就越小,哪个参数是输入文本,哪个是模式。
答案 1 :(得分:3)
在此使用Regexs是过度的 - IndexOf就足够了。
string sentence = "A || ((B && C) || E && F ) && D || G";
string pattern = "(";
IList<int> indeces = new List<int>();
int index = -1;
while (-1 != (index = sentence.IndexOf('(', index+1)))
{
indeces.Add(index);
}
或者,在您的情况下,您需要转义(
,因为它是正则表达式的特殊字符,因此模式将为"\\("
编辑:修复,谢谢Kobi
答案 2 :(得分:2)
你必须逃避(
。
换句话说:
string pattern = "\\(";