2

嗨,我正在尝试使用解决方案

在 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);
}

它产生错误,“解析”(“ - 不够)”。

我不确定我在这里做错了什么。

感谢任何帮助。

谢谢,

巴兰辛尼亚

4

3 回答 3

7

我不确定我在这里做错了什么。

您忘记了它(在正则表达式中具有特殊含义。如果你使用

string pattern = @"\(";

它应该工作,我相信。或者,只要string.IndexOf你没有真正使用正则表达式的模式匹配,就继续使用。

如果您使用正则表达式,我会亲自创建一个Regex对象,而不是使用静态方法:

Regex pattern = new Regex(Regex.Escape("("));
foreach (Match match in pattern.Matches(sentence))
...

这样一来,关于哪个参数是输入文本以及哪个是模式的混淆范围就比较小了。

于 2012-06-12T06:37:24.053 回答
3

在这上面使用正则表达式是多余的——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);
}

或者,在您的情况下,您需要转义(,因为它是正则表达式的特殊字符,所以模式将是"\\("

编辑:修复,谢谢科比

于 2012-06-12T06:35:51.510 回答
2

你必须逃避(.

换句话说:

string pattern = "\\(";
于 2012-06-12T06:36:01.273 回答