#c# #regex
Вопрос:
У меня есть следующие строки
var s1 = "Group:0.Devices.Cabins:0.Position.GroupStop:0.GroupStop";
var s2 = "Group.Devices.State:15X.GenericState";
var s3 = "Group.Devices.State.HealthState";
var s4 = "Group:1.Devices:7A.Cabins:0.Doors:0.State:0";
Мне нужно удалить :
и any char
после этого .Ожидаемый результат:
Group.Devices.Cabins.Position.GroupStop.GroupStop
Group.Devices.State.GenericState
Group.Devices.State.HealthState
Group.Devices.Cabins.Doors.State
Я использовал что-то вроде этого:
Console.WriteLine(Regex.Replace(Regex.Replace(s1, @":.*?.", "."), @":.*?$", ""));
Console.WriteLine(Regex.Replace(Regex.Replace(s2, @":.*?.", "."), @":.*?$", ""));
Console.WriteLine(Regex.Replace(Regex.Replace(s3, @":.*?.", "."), @":.*?$", ""));
Console.WriteLine(Regex.Replace(Regex.Replace(s4, @":.*?.", "."), @":.*?$", ""));
Это работает, но есть ли более эффективные способы, как это сделать? Я хочу использовать его с скомпилированным регулярным выражением.
private static Regex _regex = new Regex(@"....", RegexOptions.Compiled);
Затем _regex.Replace(s1, string.Empty);
Не могли бы вы, пожалуйста, помочь мне объединить 2 регулярных выражения в одно? Заранее спасибо
Комментарии:
1. Вы также можете попробовать
Regex.Replace(s4, ":. ?(\.|$)?", "$1")
.2. @SGKoishi спасибо, но почему бы и нет
:[^.]*
?
Ответ №1:
Вы можете использовать классы отрицательных символов для создания одного регулярного выражения, соответствующего части текста, которую вы хотите удалить. Я сопоставляю двоеточие, за которым следует ноль или более неполноценных символов:
using System;
using System.Text.RegularExpressions;
var s1 = "Group:0.Devices.Cabins:0.Position.GroupStop:0.GroupStop";
Console.WriteLine(Regex.Replace(s1, @":[^.]*", "")); // Group.Devices.Cabins.Position.GroupStop.GroupStop