我有一个字符串,我需要替换所有连字符,但只在两个分隔符之间,“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_”和“:”之间的所有内容。
如果我能获得几行C#代码,那就太棒了!但我认为RegEx Expression会很好! : - )
谢谢!
编辑:原谅我!忘记提到上面的例子是一个更大的json字符串的一部分。因此,使用mystring.Replace(“ - ”,“”)进行简单替换将无效。EDIT2:更新了my example
答案 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后跟-