首页 > 解决方案 > 使用正则表达式替换 : 和之后的任何字符

问题描述

我有以下字符串

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 个正则表达式合并为一个吗?先感谢您

标签: c#regex

解决方案


您可以使用否定字符类来创建与要删除的文本部分匹配的单个正则表达式。我匹配冒号后跟零个或多个非句号字符:

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 

夏普实验室


推荐阅读