Regex和remove不能正常工作

本文关键字:工作 常工作 remove 不能 Regex | 更新日期: 2023-09-27 18:14:47

我对我正在做的事情有些怀疑。我试图删除像字母"n"这样的文本片段,它位于"("answers"之间,反之亦然,以及许多其他情况。我使用正则表达式来查找模式,但是我怎么能只删除字母呢?

我用了这个:"[( ]" + mystring + @"[)= '-'*]"

:

foreach(Match mm in Regex.Matches(SourceCode, @"[( ]" + mystring + @"[)= '-'*]"))
{   
    int lng= mm.Length;
    SourceCode = SourceCode.Remove(mm.Index + 1, lng- 2);
}

问题是它计算原始文本的索引,如果删除"n",则下一个匹配的索引将被声明为1,并将从错误的位置删除。真的奇怪。

有人知道这是怎么回事吗?

或者你有更好的主意?

编辑:

我不能使用替换。假设我想删除n,其中n就像(n)那么如果我使用替换,它就会删除所有我不想要的那三个字符。如果我只对n使用替换,它会删除错误的字母,比如"answers"中的"n"…

Regex和remove不能正常工作

你的问题有点难读,但我认为你需要的是一个替换操作,以及环顾四周的断言:

SourceCode = Regex.Replace(SourceCode, "(?<=[( ])" + mystring + "(?=[)= *-])", "");

这将用空替换正则表达式mystring,但仅当它前面有(或空格,后面有), =, *, -或空格时。

如果您希望mystring被解释为字符串,而不是正则表达式,您应该使用Regex.Escape(mystring)而不是mystring