Regex и удалить не работает должным образом - PullRequest
0 голосов
/ 17 ноября 2011

У меня есть некоторые сомнения по поводу того, что я делаю. Я пытаюсь удалить кусочки текста, такие как буква "n", где они находятся между "(" и "" или наоборот), и во многих других случаях. Я использую регулярное выражение, чтобы найти образец, но как я могу удалить только букву?

Я использовал это: "[( ]" + mystring + @"[)= \-\*]"

как это:

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

Проблема в том, что он вычисляет индекс для исходного текста, и если будет удалено «n», индекс для следующего совпадения будет заменен на единицу и будет удален из неправильного места. Действительно странно.

Кто-нибудь знает, что он делает?

Или, может быть, у вас есть лучшая идея?

Edit:

Я не могу использовать замену. Допустим, я хочу удалить «n», где n похоже на «(n», поэтому, если я использую замену, он удалит все те три символа, которые мне не нужны. Если я использую замену только для n, он удалит неправильную букву, например «» n "от" и "...

1 Ответ

4 голосов
/ 17 ноября 2011

Ваш вопрос немного сложен для чтения, но я думаю, что вам нужна операция замены вместе с обходными утверждениями :

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

Это заменит регулярное выражение mystring ни с чем, но только если ему предшествует ( или пробел, а затем ), =, *, - или пробел.

Если вы хотите mystring чтобы интерпретироваться как строка, а не как регулярное выражение, вы должны использовать Regex.Escape(mystring) вместо mystring.

...