在 C# 中的字符串中查找指定字符串的所有索引

本文关键字:字符串 索引 查找 | 更新日期: 2023-09-27 18:37:02

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

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

它产生错误,"解析"(" - 不够)的"。

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

感谢任何帮助。

谢谢

巴兰·辛尼亚

在 C# 中的字符串中查找指定字符串的所有索引

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

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

string pattern = @"'(";

我相信它应该有效。或者,只要继续使用string.IndexOf,前提是您并没有真正使用正则表达式的模式匹配。

如果你打算使用正则表达式,我个人会创建一个Regex对象,而不是使用静态方法:

Regex pattern = new Regex(Regex.Escape("("));
foreach (Match match in pattern.Matches(sentence))
...
这样,关于

哪个参数是输入文本,哪个是模式的混淆空间就更小了。

对此使用正则表达式是矫枉过正的 - 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);
}

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

编辑:修复,谢谢科比

你必须

逃离(

换句话说:

string pattern = "''(";