RegEx删除两个字符串之间的连字符

时间:2017-08-08 18:32:25

标签: c# json regex

我有一个字符串,我需要替换所有连字符,但只在两个分隔符之间,“clients_field_”和“:”

例如:

"clients_field_4741a6c5-3855-4455-b487-0b38b0038ae6": "info@domain.com",
"clients_field_78f225e0-1a78-4930-b251-ad2217baeb1b": "2017-07-26"

删除所有连字符后,它应如下所示:

"clients_field_4741a6c538554455b4870b38b0038ae6": "info@domain.com",
"clients_field_78f225e01a784930b251ad2217baeb1b": "2017-07-26"

我试图找到一个有效的正则表达式,但我需要一些帮助。我尝试了表达式(?<=clients_field_)(.*)(?=:),但这当然会选择“clients_field_”和“:”之间的所有内容。

查看my example

如果我能获得几行C#代码,那就太棒了!但我认为RegEx Expression会很好! : - )

谢谢!

编辑:原谅我!忘记提到上面的例子是一个更大的json字符串的一部分。因此,使用mystring.Replace(“ - ”,“”)进行简单替换将无效。

EDIT2:更新了my example

2 个答案:

答案 0 :(得分:2)

试试这段代码:

var input = "clients_field_78f225e0-1a78-4930-b251-ad2217baeb1b: 2017-07-26\n"
    + "clients_field_ce1649d3-18e6-48af-a9fb-871c577c7da6: 2018-12-31";
var regex = new Regex("^(?<const>clients_field_)(?<p1>[^:]+)(?<p2>.+)$", RegexOptions.Multiline);
var lines = regex.Matches(input)
    .Cast<Match>()
    .Select(g => $"{g.Groups["const"].Value}{g.Groups["p1"].Value.Replace("-", "")}{g.Groups["p2"].Value}");
var result = string.Join("\n", lines);

result将是

  

clients_field_78f225e01a784930b251ad2217baeb1b:2017-07-26   clients_field_ce1649d318e648afa9fb871c577c7da6:2018-12-31

答案 1 :(得分:0)

尝试使用基于\G anchor的正则表达式将匹配链接到所需的起点。

(?<=\G(?!^)|clients_field_)(\w*)-

替换第一个capturing group内捕获的内容。

$1
  • (?<=打开lookbehind
  • \G(?!^)在上次匹配时继续匹配,但不在^开始或
  • |clients_field_匹配子字符串落后的位置
  • (\w*)-捕获零个或多个word characters后跟-

See this demo at regex101