【问题标题】:Replace long dash with a usual one in C# [duplicate]用 C# 中的常用破折号替换长破折号 [重复]
【发布时间】:2023-03-20 20:44:01
【问题描述】:

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

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

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

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

【问题讨论】:

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

标签: c# regex replace


【解决方案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("\\p{Pd}", "-");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 2011-03-08
    • 2012-07-07
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多