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,只捕捉标点符号不同于'-' ?
如何将以下正则表达式的匹配替换为空格:
[^'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