用 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 和 Horizontal 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# 中的常用破折号替换长破折号 [重复]的主要内容,如果未能解决你的问题,请参考以下文章