У меня есть строка, из которой мне нужно удалить цифры между первым дефисом и подчеркиванием.
Строки бывают:
string ProjectName1 = "1234-5678_abcd-efgh-(5000)|type";
string ProjectName2 = "0-4378_abcd-efgh-(5000)|type";
я пытался
Regex x = new Regex("(\\-\\)(.*?)(\\_\\)");
string repl = "";
string removeDigits = x.Replace(ProjectName, "$1" + repl + "$3");
Результат должен быть
ProjectName1 = "1234-abcd-efgh-(5000)|type";
ProjectName2 = "0-abcd-efgh-(5000)|type";
Я пробовал приведенный выше код, но получаю следующую ошибку.
Error message: parsing "(\-\)(.*?)(\_\)" - Unrecognized escape sequence \_.
Я пробовал разные вещи с регулярным выражением, но всегда получаю аналогичную ошибку.
Любая помощь приветствуется!
... тогда как Regex.Replace(input, @"(?<=^[^-]*)-\d+_", "-") заменит цифры, окруженные "-" и "_", на "-"Только, если они встречаются в первом "-" на входе.





Следующее регулярное выражение, похоже, помогает:
Regex x = new Regex("^(\\d+-).*?_(.*)$");
Результаты для обоих образцов входных данных
x.Replace(ProjectName1, "$1$2"); //1234-abcd-efgh-(5000)|type
x.Replace(ProjectName2, "$1$2"); //0-abcd-efgh-(5000)|type
Это сработало отлично, спасибо :)
вам не нужно заходить так далеко, используя группу захвата, если ввод очень предсказуем
Regex regex = new Regex(@"-\d+_");
string result = regex.Replace(ProjectName1, "-", 1);
вы знаете, что хотите удалить цифру + подчеркивание, сохранив тире. так что вы можете просто удалить все это и снова добавить тире. Ограничив замену только одним экземпляром, вы замените только первое вхождение
Не уверен, правильно ли я понял, что вам нужно - нужно ли заменять все цифры с подчеркиванием?
Попробуй это:
string formatted1 = Regex.Replace(ProjectName1, @"\d+_", string.Empty);
Нет, просто цифры между первым тире и подчеркиванием
Regex.Replace(input, @"(?<=^.*?)-\d+_", "-")заменит Только первое вхождение цифр, окруженных"-"и"_", на"-".