正则表达式删除两个字符串之间的连字符

Posted

技术标签:

【中文标题】正则表达式删除两个字符串之间的连字符【英文标题】:RegEx to remove hyphens between two strings 【发布时间】:2018-01-16 10:56:07 【问题描述】:

我有一个字符串需要替换所有连字符,但仅限于两个分隔符“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 表达式会很好! :-)

谢谢!

编辑:原谅我!忘了说上面的例子是一个更大的 json 字符串的一部分。所以用 mystring.Replace("-", "") 进行简单替换是行不通的。

EDIT2:更新my example

【问题讨论】:

看起来冒号之前的部分具有相同数量的字符。如果是这种情况,则无需使用正则表达式。您可以将字符串分成两部分,并从第一部分中删除连字符。 如果您的前缀始终是clients_field_,您可以仅对 GUID 进行子字符串替换。然后与clients_field_ 连接 原谅我!忘了说上面的例子是一个更大的 json 字符串的一部分。如此简单的用 mystring.Replace("-", "") 替换是行不通的。是的@AndyG,它们都是相同数量的字符,但是由于它是一个很大的json字符串,我认为RegEx可能会更好? 尝试基于\G anchor 的(?<=\G(?!^)|clients_field_)([^-:]*)- 正则表达式并替换为$1 首先在capturing group 中捕获的内容。 谢谢@bobblebubble!这就是我要找的东西! 【参考方案1】:

试试这个代码:

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"].Valueg.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

【讨论】:

【参考方案2】:

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

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

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

$1
(?&lt;= 打开lookbehind \G(?!^) 在最后一场比赛中继续匹配,但不在 ^ 开始或 |clients_field_ 匹配子字符串后面的位置 (\w*)- 捕获零个或多个 word characters 后跟 -

See this demo at regex101

【讨论】:

以上是关于正则表达式删除两个字符串之间的连字符的主要内容,如果未能解决你的问题,请参考以下文章

php用正则表达式怎么获得两个字符串之间字符

正则表达式:获取两个字符之间的字符串

正则表达式删除特殊字符

C正则表达式,匹配两个字符串之间的内容

正则表达式截取两个指定字符串之间的内容?

php正则表达式获取两个字符之间的文字