正则表达式删除两个字符串之间的连字符
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
(?<=
打开lookbehind
\G(?!^)
在最后一场比赛中继续匹配,但不在 ^
开始或
|clients_field_
匹配子字符串后面的位置
(\w*)-
捕获零个或多个 word characters 后跟 -
See this demo at regex101
【讨论】:
以上是关于正则表达式删除两个字符串之间的连字符的主要内容,如果未能解决你的问题,请参考以下文章