在 C# 中用通常的长破折号替换长破折号

tix*_*oxi 0 c# regex replace

我有一个带有多个破折号的字符串,但它包含长破折号。

我可以使用什么方法来规范化破折号?

text = Regex.Replace(text, @"(\u2012|\u2013|\u2014|\u2015)", "-");
Run Code Online (Sandbox Code Playgroud)

预期输出类似于11-1111-11/11 实际输出几乎相同,但有些破折号很长。(我不能放入那个破折号,因为 stackoverflow 无法识别它。) 在此处输入图片说明

Fly*_*g57 5

这有效:

 private const string DashPattern = @"[\u2012\u2013\u2014\u2015]";
 private static Regex _dashRegex = new Regex(DashPattern);

 public static string RemoveLongDashes(string s)
 {
     return _dashRegex.Replace(s, "-");
 }
Run Code Online (Sandbox Code Playgroud)

带有竖线字符 ( |) 的表达式不是有效的正则表达式。如果要替换所有元音,请使用类似 的表达式@"[aeiou]",即一组方括号内的选项。

  • 我很好奇为什么这被否决了。它提供了一种将所有各种 Unicode 破折号字符(数字破折号、En 破折号、Em 破折号和水平条(U+2012 到 U+2015))转换为普通的老式 ASCII 连字符的方法。这就是原来问题的要点 (2认同)