在 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);
}
它产生错误,"解析"(" - 不够)的"。
我不确定我在这里做错了什么。
感谢任何帮助。
谢谢
巴兰·辛尼亚
我不确定我在这里做错了什么。
您忘记了(
在正则表达式中具有特殊含义。如果您使用
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 = "''(";