c#应用程序中的正则表达式语法

本文关键字:正则表达式 语法 应用程序 | 更新日期: 2023-09-27 18:15:17

我想弄清楚如何用空格替换字符串中的所有标点符号,但保持一个特殊字符:'-'

例如,句子

"嗨!你知道我是一个不墨守成规的人吗?"

应该转换成

"嗨,我是一个与众不同的人,你知道吗?"

我知道解决方案将是单行正则表达式,但我真的不习惯在正则表达式中"思考",所以到目前为止我所尝试的是用"9"替换所有的"-",然后用"替换所有的标点符号,然后用"-"重新替换所有的"9"。它可以工作,但这是可怕的(特别是如果输入包含一些'9'字符):

string s = @"Hello! Hi want to remove all punctuations but not ' - ' signs ... Please help ;)";
                s = s.Replace("-", "9");
                s = Regex.Replace(s, @"['W_]", " ");
                s = s.Replace("9", "-");

所以,有人能帮我写一个Regex,只捕捉标点符号不同于'-' ?

c#应用程序中的正则表达式语法

如何将以下正则表达式的匹配替换为空格:

[^'w's-]|_

也就是说,除了单词字符、数字、空格或破折号以外的任何字符

这个正则表达式应该有帮助。使用字符类减法从字符类中删除一些字符。

var expected = Regex.Replace(subject, @"[_'W-['-'s]]","");

您可以使用Linq:

var chars = s.Select(c => char.IsPunctuation(c) && c != '-' ? ' ' : c);
var result = new string(chars.ToArray());

把所有你认为是标点符号的东西放到一个集合[]并在(中查找单个匹配字符…)需要更换。下面是一个示例,我试图替换!, ., ,, '?

 string text = "hi! I'm an out-of-the-box person, did you know ?";
Console.WriteLine (
Regex.Replace(text, "([!.,'?])", " ")
);
// result:
// hi  I m an out-of-the-box person  did you know

对于不想指定集合的正则表达式纯粹主义者,可以使用集合减法。我仍然指定一个集合,它搜索任何非字母字符'W,它将匹配包括-在内的所有项。但是通过使用集合减法-[]我们可以把-排除。

这是那个例子

Regex.Replace(text, @"(['W-[-]])", " ")

// result:
// hi  I m an out-of-the-box person  did you know