【问题标题】:Filter out alphabetic with regex using C# [duplicate]使用 C# 使用正则表达式过滤掉字母 [重复]
【发布时间】:2012-11-03 22:04:40
【问题描述】:

可能重复:
Regex - Only letters?

我尝试从文本中过滤掉字母 ([a-z],[A-Z])。

我试过"^\w$",但它会过滤字母数字(字母和数字)。

过滤掉字母的模式是什么?

谢谢。

【问题讨论】:

    标签: c# regex filter alphabetical


    【解决方案1】:

    要删除所有字母,试试这个:

    void Main()
    {
        var str = "some junk456456%^&%*333";
        Console.WriteLine(Regex.Replace(str, "[a-zA-Z]", ""));
    }
    

    【讨论】:

    • String.Replace 或 Regex.Replace ?
    • 更新为所要求的语言并且有意义。
    • 太棒了!谢谢。你能解释一下你做了什么吗?
    【解决方案2】:

    要过滤多个字母字符,请使用

    ^[a-zA-Z]+$
    

    【讨论】:

    • 它测试了谢谢,但它不是过滤了吗?我的意思是,它过滤一切,但这个? (a-zA-Z)
    • @user1798362 你的问题暗示\w 做了你想要的,但对于字母数字,所以如果你得到答案只是用“alpha”替换“alphanumerics”而不神奇地知道还有什么可能你的代码有问题。
    • 不确定我是否理解。您要选择 除了 个字母字符之外的所有内容吗?
    【解决方案3】:

    为了过滤 out 只有英文字母使用:

    [^a-zA-Z]+
    

    用于过滤 字母,无论使用何种语言:

    [^\p{L}]+
    

    如果您想反转效果,请删除左括号后面的帽子^

    如果您想找到与模式匹配的整行,请将上述模式括在^$ 符号中,否则你不需要它们 .请注意,要使它们对每一行生效,您需要创建 Regex 对象并启用多行选项。

    【讨论】:

    • 使用 Sublime Text 2 第一个示例按描述工作,但第二个示例没有。不知道这是否是 ST2 中正则表达式引擎的怪癖。
    • 正则表达式引擎之间可能存在差异。我已经使用基于 .NET 的引擎 RegexHero 对它们进行了测试,它们按预期工作。
    • 我也在 Notepad++ 中测试过它们,它们在那里也能正常工作。
    • +1 为正确答案。有关信息:您不需要将 Unicode 属性放入否定字符类[^\p{L}],您只需将\P{L} 与大写P 一起编写即可获得否定版本。
    • @stema 谢谢。每天学习新东西。
    【解决方案4】:

    试试这个简单的方法:

    var result = Regex.Replace(inputString, "[^a-zA-Z\s]", "");
    

    解释:

    + 匹配前一个元素一次或多次。

    [^character_group] 否定:匹配任何不在 character_group 中的单个字符。

    \s 匹配任何空白字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-07
      • 1970-01-01
      • 2021-05-19
      • 2011-03-07
      相关资源
      最近更新 更多