【问题标题】:How to replace special characters using regular expressions?如何使用正则表达式替换特殊字符?
【发布时间】:2010-12-13 00:06:29
【问题描述】:

如何使用正则表达式替换特殊字符? 特殊,我的意思是那些有时出现在文本中的符号字符。

例如,在下面的文本中,我想删除每行开头的气泡。

护照详情

Name as on passport
Relationship
Passport Number
Date of Issue
Expiry Date
Place of Issue

问题已编辑:抱歉,行首的气泡不再可见。提交问题后,stackoverflow 删除了该特殊字符。

有人知道如何替换那些特殊字符吗?我不想替换 #、@ 或 ! 等字符。这些很简单,可以用键盘输入。

对不起,我不知道如何将这些特殊字符放在我的问题中。我会尝试解释。在 word 文件中,我们将项目符号放在文本之前。我想替换代表此类字符的字符。我有一些文本文件,其中包含看起来像气泡的字符。

最后,我找到了解决方案。 这个正则表达式对我有用

([^(A-Za-z0-9)+|\r|\n|\t|'|"|#|;|:|/|\|.|,| ])

【问题讨论】:

  • 您要替换它们还是删除它们?
  • 我想用单个空格字符替换这些字符。
  • 您需要指定您使用的语言,以及您想要接受的字符集。
  • 对不起。我再次忘记提及我使用的是什么语言。我正在使用 C#。
  • 那么您可能只使用 ASCII 字符就可以了。按照 Kinopiko 的建议去做(因为正则表达式在 C# 中应该看起来一样)。

标签: c# regex special-characters


【解决方案1】:

(这是在指定语言之前发布的。)

要在 Perl 中用空格替换非 ascii 字符,

 $string =~ s/[^[:ascii:]]/ /g;

http://codepad.org/KTMvQiOz。这里的[^[:ascii:]] 是一个匹配任何非ascii 字符的正则表达式。

【讨论】:

  • 哦,谢谢 Kinopiko。我将尝试在 C# 中找到如何做同样的事情
【解决方案2】:

可以用这个正则表达式找到所有“特殊”字符,然后用空格字符替换它们:

/[<special_characters_here>]/

但是,通常最好使用白名单,从而提及所有允许的字符并将所有不属于它们的字符替换为空格字符:

/[^<allowed_characters_here>]/

【讨论】:

  • 但是有很多特殊字符,很难找到这些字符的ASCII码,然后将这些码插入正则表达式。这样的角色有什么类吗?
  • 你可以使用类似 Kinopiko 提到的东西。但是,我不能告诉你更多,因为我不知道你想要允许或禁止哪些(种类)字符......
【解决方案3】:

我没有足够的时间来充实一个完整的例子。但由于您使用的是 .NET,因此您可以匹配任意数量的这些字符类:

http://msdn.microsoft.com/en-us/library/20bw873z.aspx

选择您要接受的内容并替换任何不等于该集合的内容。

【讨论】:

    【解决方案4】:

    你的意思是替换回车符和换行符吗?

    如果这就是你所追求的,那就这样做吧:

    var source = "once\r\ntwice\r\nthrice";
    var pattern = new Regex(@"\r\n");
    var result = pattern.Replace(source, ",");
    Assert.AreEqual("once,twice,thrice", result);
    

    【讨论】:

    • 对不起亚当,我不想替换新行或回车。我不知道如何将这些特殊字符放在我的问题中。我将尝试解释。在 word 文件中,我们将项目符号放在文本之前。我想替换代表此类字符的字符。我有一些文本文件,其中包含看起来像气泡的字符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    相关资源
    最近更新 更多