Регулярное выражение:
((?:--|/\*)[^~]*)~(\*/)?
код C # для его использования:
string code = "all that text of yours";
Regex regex = new Regex(@"((?:--|/\*)[^~]*)~(\*/)?", RegexOptions.Multiline);
result = regex.Replace(code, "$1;$2");
Не тестируется с C #, но регулярное выражение и замена в RegexBuddy работают с вашим текстом =)
Примечание: я не очень талантливый писатель регулярных выражений, так что, возможно, это было бы написано лучше. Но это работает. И обрабатывает как ваши дела с однострочными комментариями, начиная с -, так и многострочными с / * * /
Редактировать: прочитайте ваш комментарий к другому ответу, поэтому удалите якорь ^
, чтобы он позаботился о том, чтобы комментарии не начинались с новой строки.
Редактировать 2: подумал, что это может быть немного упрощено. Также обнаружил, что он отлично работает и без конечного $ anchor.
Пояснение:
// ((?:--|/\*)[^~]*)~(\*/)?
//
// Options: ^ and $ match at line breaks
//
// Match the regular expression below and capture its match into backreference number 1 «((?:--|/\*)[^~]*)»
// Match the regular expression below «(?:--|/\*)»
// Match either the regular expression below (attempting the next alternative only if this one fails) «--»
// Match the characters “--” literally «--»
// Or match regular expression number 2 below (the entire group fails if this one fails to match) «/\*»
// Match the character “/” literally «/»
// Match the character “*” literally «\*»
// Match any character that is NOT a “~” «[^~]*»
// Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
// Match the character “~” literally «~»
// Match the regular expression below and capture its match into backreference number 2 «(\*/)?»
// Between zero and one times, as many times as possible, giving back as needed (greedy) «?»
// Match the character “*” literally «\*»
// Match the character “/” literally «/»