删除带有混合符号的字符串部分

时间:2016-06-09 15:11:29

标签: c# string replace

我正在为已请求它的游戏服务器开发一个kill feed类型程序。

在大多数情况下,除了清理以下字符串的最简单方法之外,一切都非常简单:

name1[1234567/12345678901234567] was killed by name2[12345/12345678901234567]

要注意事项:

  • 我需要两个独立的字符串。
  • 1将是第一个“/”后面的17位数字,第二个是第二个“/”后面的17位数字
  • name1或name2可能包含“/”,这就是为什么我不能只使用Index和之后的17位数。
  • name1或name2也可能包含一个“[CLAN]”,它也将抛出第一个“[”的索引。
  • “/”后面的17位数字始终为17位数,但是,它在括号内的数字长度会有所不同。

非常感谢任何帮助我指明正确方向的帮助!

1 个答案:

答案 0 :(得分:1)

您可以使用这样的正则表达式:

(?<name1>.*)\[(.*\/)?(?<val1>.*)\] was killed by (?<name2>.*)\[(.*\/)?(?<val2>.*)\]

请参阅regex101

成功时,Regex.Match将返回2个组:val1val2,其中包含值。

示例代码

var pattern = @"(?<name1>.*)\[(.*\/)?(?<val1>.*)\] was killed by (?<name2>.*)\[(.*\/)?(?<val2>.*)\]";
var input = @"name1[1234567/12345678901234567] was killed by name2[12345/12345678901234567]";
var match = Regex.Match(input, pattern);
if (match.Success)
    Console.WriteLine("1st value = {0}, 2nd value = {1}", match.Groups["val1"], match.Groups["val2"]);

<强>输出

第一个值= 12345678901234567,第二个值= 12345678901234567