C# 删除破折号,但不删除连字符
我想删除间隔词之前、之后和之间的破折号,但不删除连字符 这是一个测试句-测试----1-2-3-4-- 应成为: 这是一个测试句。测试一、二、三、四 删除多个破折号C# 删除破折号,但不删除连字符,c#,regex,C#,Regex,我想删除间隔词之前、之后和之间的破折号,但不删除连字符 这是一个测试句-测试----1-2-3-4-- 应成为: 这是一个测试句。测试一、二、三、四 删除多个破折号-- 保持多个连字符3--4 我试着用这个: string-sense=“这是一个测试句子。-测试--1-2-3-4-”; 字符串regex=@”(?我建议对不希望破折号旁边的字符同时进行正向回溯和正向前瞻。在您的情况下,这将是空格和句号。如果匹配了“向后看”或“向前看”,则要删除该破折号 这将是:(?您可以使用\b|\s执行此任
--
保持多个连字符
3--4
我试着用这个:
string-sense=“这是一个测试句子。-测试--1-2-3-4-”;
字符串regex=@”(?我建议对不希望破折号旁边的字符同时进行正向回溯和正向前瞻。在您的情况下,这将是空格和句号。如果匹配了“向后看”或“向前看”,则要删除该破折号
这将是:(?您可以使用\b|\s
执行此任务
崩溃无耻地从regex101.com复制:
/(\b|\s)({3})(\b|\s)/g
- 第一个捕获组
(\b|\s)
- 第一个备选方案
\b
\b
在单词边界断言位置(^\w |\w$|\w\w |\w\w)
- 第二个备选方案\s
\s
匹配任何空白字符(等于[\r\n\t\f\v]
)
- 第二捕获组
({3})
-{3}
匹配字符-按字面意思(区分大小写)
{3}
量词-精确匹配3次
- 第三捕获组
(\b|\s)
- 第一个备选方案
\b
\b
在单词边界断言位置(^\w |\w$|\w\w |\w\w)
- 第二个备选方案
\s
\s
匹配任何空白字符(等于[\r\n\t\f\v]
)
您只需匹配单词字符之间的所有连字符,然后使用简单的
Regex.Replace(s, @"\b(-+)\b|-", "$1")
见
详细信息
\b(-+)\b
-单词边界,后跟1+连字符,然后是单词边界(即字母、数字和下划线之间的连字符)
|
-或
-
-其他上下文中的连字符(将被删除)
见:
可能有点像See,有一个更简单的解决方案。
Regex.Replace(s, @"\b(-+)\b|-", "$1")
var s = "This- -is - a test-sentence. -Test- --- One-Two--Three---Four----.";
var result = Regex.Replace(s, @"\b(-+)\b|-", "$1");
Console.WriteLine(result);
// => This is a test-sentence. Test One-Two--Three---Four.