.net Regex,删除匹配的序列

时间:2017-02-02 15:06:18

标签: c# .net regex

我的正则表达式知识让我失望,我需要一些帮助。

我正在尝试使用可能如下所示的字符串输入

@"RRR:domsd\ddf:sdf:dsf:f"

@"sds4:kwertss\wegggds:rowdf"

并且在两种情况下从开始到\之后但在第一:之后的第一个\之前剥离所有内容。

结果将是:

RRR:domsd\ddf
sds4:kwertss\wegggds

如果找不到: \ :序列,则状态匹配是否失败。

到目前为止,我已尝试过以下两个注册表

第一名:@".*[:].*[\\].*[:]",其中包含截至上一个:的所有内容,而不是\之后的第一个

第二名:@"(.+?:.+?):(.+)"只匹配整个字符串

3 个答案:

答案 0 :(得分:3)

您似乎需要使用negated character classes

^[^:]*:[^\\]*\\[^:]*(?=:)

请参阅regex demo

<强>详情:

  • ^ - 字符串开头
  • [^:]* - 除:
  • 以外的0个字符
  • : - 冒号
  • [^\\]* - 除\
  • 以外的0个字符
  • \\ - 文字\
  • [^:]* - 除:
  • 以外的0个字符
  • (?=:) - 需要:的积极前瞻。

在C#中:

var m = Regex.Match(s, @"^[^:]*:[^\\]*\\[^:]*(?=:)");
var res = string.Empty;
if (m.Success) 
{
     res = m.Value;
}

答案 1 :(得分:0)

你可以使用正则表达式(带有全局和多行标志)

(^.*\\.*?):

请参阅demo

答案 2 :(得分:0)

您可以使用正则表达式:^(.*:.*[\\][^:]*):。 如果找不到: \ :序列,这​​将失败。 匹配将是括号之间的部分。

Here你可以看到一个演示。