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"…
你的问题有点难读,但我认为你需要的是一个替换操作,以及环顾四周的断言:
SourceCode = Regex.Replace(SourceCode, "(?<=[( ])" + mystring + "(?=[)= *-])", "");
这将用空替换正则表达式mystring
,但仅当它前面有(
或空格,后面有)
, =
, *
, -
或空格时。
如果您希望mystring
被解释为字符串,而不是正则表达式,您应该使用Regex.Escape(mystring)
而不是mystring
。