gpt4 book ai didi

c# - 使用正则表达式迭代字符串并搜索 3 个连续的连字符并将其替换为 [space][hyphen][space]

转载 作者:行者123 更新时间:2023-12-05 00:13:47 28 4
gpt4 key购买 nike

我当前有一个返回时看起来像这样的字符串:

//This is the url string
// the-great-debate---toilet-paper-over-or-under-the-roll

string name = string.Format("{0}",url);
name = Regex.Replace(name, "-", " ");

当我执行以下正则表达式操作时,它会变成这样:

 the great debate  toilet paper over or under the roll

但是,就像我在问题中提到的那样,我希望能够将正则表达式应用于 url 字符串,以便获得以下输出:-

 the great debate - toilet paper over or under the roll

我非常感谢任何帮助。

[编辑]但是,并非所有字符串都像这样,其中一些字符串只有一个连字符,因此上述方法有效

 world-water-day-2016

它变成了

 world water day 2016

但是对于这个:

the-great-debate---toilet-paper-over-or-under-the-roll

我需要一种方法来检查字符串是否有 3 个连字符,而不是将这 3 个连字符替换为 [空格][连字符][空格]。然后用空格替换单词之间所有剩余的单个连字符。

最佳答案

首先,对于此类问题总是有一个非常幼稚的解决方案:您将上下文中的特定匹配替换为当前环境中通常不使用的一些字符,并且在替换通用子字符串后,您可以替换临时子字符串但有必要的异常(exception)。

var name = url.Replace("---", "[ \uFFFD ]").Replace("-", " ").Replace("[ \uFFFD ]", " - ");

您还可以使用基于正则表达式的替换,匹配捕获它的 3 个连字符子字符串,或者仅匹配单个连字符,然后检查组 1 是否在匹配评估器内匹配(Regex.Replace 的第三个参数可以是匹配评估器方法)。

它看起来像

var name = Regex.Replace(url, @"(---)|-", m => m.Groups[1].Success ? " - " : " ");

请参阅C# demo .

所以,当 (---)部分匹配,3 个连字符放入第 1 组,.Success属性设置为true 。因此,m => m.Groups[1].Success ? " - " : " "将 3 个连字符替换为空格+ - +空格和 1 个连字符(实际上可能是 2 个连续连字符中的 1 个)以及一个空格。

关于c# - 使用正则表达式迭代字符串并搜索 3 个连续的连字符并将其替换为 [space][hyphen][space],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46716160/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com