当前位置:  开发笔记 > 编程语言 > 正文

如何从字符串中删除标点符号?

如何解决《如何从字符串中删除标点符号?》经验,为你挑选了6个好方法。

对于这个问题的30秒内希望得到答案,我特意寻找C#

但在一般情况下,删除任何语言标点符号的最佳方法是什么?

我应补充一点:理想情况下,解决方案不需要您枚举所有可能的标点符号.

相关:Python中的条带标点符号



1> GWLlosa..:
new string(myCharCollection.Where(c => !char.IsPunctuation(c)).ToArray());


LinQ永远不会让我感到惊讶.
对于$或^你可以使用`!char.IsSymbol(c)`验证.只是为了记录

2> Hades32..:

为什么不简单:

string s = "sxrdct?fvzguh,bij.";
var sb = new StringBuilder();

foreach (char c in s)
{
   if (!char.IsPunctuation(c))
      sb.Append(c);
}

s = sb.ToString();

RegEx的使用通常比简单的char操作慢.那些LINQ操作看起来对我来说太过分了.你不能在.NET 2.0中使用这样的代码......



3> Joachim Saue..:

假设"最好"意味着"最简单",我建议使用这样的东西:

String stripped = input.replaceAll("\\p{Punct}+", "");

这个例子适用于Java,但所有足够现代的Regex引擎都应该支持这个(或类似的东西).

编辑:Unicode-Aware版本是这样的:

String stripped = input.replaceAll("\\p{P}+", "");

第一个版本只查看ASCII中包含的标点字符.



4> Brian Low..:

描述意图,最容易阅读(恕我直言)和最佳表现:

 s = s.StripPunctuation();

实施:

public static class StringExtension
{
    public static string StripPunctuation(this string s)
    {
        var sb = new StringBuilder();
        foreach (char c in s)
        {
            if (!char.IsPunctuation(c))
                sb.Append(c);
        }
        return sb.ToString();
    }
}

这是使用Hades32的算法,这是发布的最佳表现.



5> Anton..:

您可以使用regex.replace方法:

 replace(YourString, RegularExpressionWithPunctuationMarks, Empty String)

由于这会返回一个字符串,因此您的方法将如下所示:

 string s = Regex.Replace("Hello!?!?!?!", "[?!]", "");

如果你愿意,你可以用"s?siticitated"替换"[?!]":

(\p{P})

这应该找到任何标点符号.



6> Nick Vaccaro..:

这个帖子太旧了,但我不能发布更优雅的(IMO)解决方案.

string inputSansPunc = input.Where(c => !char.IsPunctuation(c)).Aggregate("", (current, c) => current + c);

这是LINQ没有WTF.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有