用 C# 中的常用破折号替换长破折号 [重复]

Posted

技术标签:

【中文标题】用 C# 中的常用破折号替换长破折号 [重复]【英文标题】:Replace long dash with a usual one in C# [duplicate] 【发布时间】:2019-12-11 06:31:13 【问题描述】:

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

我可以使用什么方法来标准化破折号?

text = Regex.Replace(text, @"(\u2012|\u2013|\u2014|\u2015)", "-");

预期的输出类似于11-1111-11/11 实际几乎相同,但有些破折号很长。 (我不能输入那个破折号,因为 *** 无法识别它。)

【问题讨论】:

如果您能够将“超长”破折号复制并粘贴到替换语句中,那么它应该可以正常工作。甚至不需要regex 不能。无法粘贴到 Visual Studio 中的 C# 文件。 在调试器中检查text。查看未被替换的破折号的 unicode 值。将这些代码添加到您的正则表达式中。 为什么不能粘贴?你得到什么错误? 我能够将 mdash 粘贴到 VS 中。检查您的文件编码。 【参考方案1】:

这行得通:

 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, "-");
 

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

【讨论】:

我很好奇为什么这被否决了。它提供了一种将所有各种 Unicode 破折号字符(Figure Dash、En Dash、Em Dash 和 Horizo​​ntal Bar(U+2012 到 U+2015))转换为普通旧 ASCII 式连字符的方法。这是原始问题的要点 谢谢大佬...这应该是答案【参考方案2】:

这是关于 em dash 的一些信息。您也许可以将这篇文章中的破折号复制并粘贴到您的代码中,并使用 string.replace

The em dash

查看以下 SO 帖子以获得答案:

replacing the em dash

看起来下面的代码解决了其他人的问题:

String s = "asd – asd";
s = s.replaceAll("\\pPd", "-");

【讨论】:

以上是关于用 C# 中的常用破折号替换长破折号 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

小写字符串并用破折号替换空格[重复]

argparse 长选项的单破折号

bash中的冒号破折号“:-”是啥意思[重复]

在matplotlib中更改虚线中的破折号间距[重复]

用破折号替换 URL 中的空格

用空格替换文本区域中的逗号、破折号和输入键