【问题标题】:Remove special characters and numbers from a string but ignore the white spaces between the words?从字符串中删除特殊字符和数字但忽略单词之间的空格?
【发布时间】:2017-04-04 18:12:06
【问题描述】:

我想要一个可以像这样转换这个简单句子的 java 正则表达式:

1) I am a (happy) person!!!

进入

I am a happy person.

即忽略所有数字和特殊字符,但忽略单词之间的空格。

我现在正在使用这个正则表达式:

("\\P{L}", "")

但它给出的输出如下:

Iamahappyperson

感谢您的帮助!!

【问题讨论】:

  • 现在试试我的答案( String new_string = "I am a (happy) person!!!".replaceAll("[^a-zA-Z ]+",""); )我忘了包括空格
  • 尊重不使用 a-zA-Z。 javacodegeeks.com/2017/01/forget-iso-8859-1.html:正则表达式示例和教程总是为您提供 [a-zA-Z0-9]+ 正则表达式来“验证字母数字输入”。它内置在许多验证框架中。这是完全错误的。这是一个绝对不能出现在代码中任何地方的正则表达式,除非你有很好的解释。然而,这个例子无处不在。相反,正确的正则表达式是 [\p{L}0-9]+。

标签: java android


【解决方案1】:

使用这个正则表达式[^\p{Alpha} ]

  • \p{Alpha}一个字母字符:[\p{Lower}\p{Upper}]
  • [^\p{Alpha} ] 除字母和空格外的所有字符

这里是你如何使用它:

System.out.println("1) I am a (happy) person!!!".replaceAll("[^\\p{Alpha} ]", ""));

如果要保留 unicode 字母字符,只需在上述正则表达式的开头添加 (?U)。这里 (?U) 打开 UNICODE_CHARACTER_CLASS 标志

【讨论】:

  • System.out.print("1) 我是一个(快乐的)人!!!".replaceAll("[^\\p{Alpha} ]", "") + "." );期间。
  • 值得考虑的是 \p{Alpha} 默认只匹配 ASCII 字母(您必须打开 UNICODE_CHARACTER_CLASS 标志)。 \p{L} 将始终匹配任何 UTF-8 字母。
  • @MikhailAntonov 你是对的。我正在为此编辑答案
【解决方案2】:
System.out.println("I am a (happy) person!!!".replaceAll("[^\\p{L}\\p{Z}]", ""));

打印出“我是一个快乐的人”

【讨论】:

    【解决方案3】:

    试试这个方法

    String new_string = "I am a (happy) person!!!".replaceAll("[^a-zA-Z ]+","");
    

    代码:

    public class HelloWorld
    {  public static void main(String[] args)
      {
    
        String new_string = "I am a (happy) person!!!".replaceAll("[^a-zA-Z ]+","");
        System.out.print(new_string);
    
      }
    }
    

    输出:我是一个快乐的人

    【讨论】:

      【解决方案4】:

      [a-zA-Z\d\s] 如果你想保留字母数字和空格。

      [a-zA-Z\s] 仅用于 alpha 和空格。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-24
        • 2021-04-23
        • 2020-07-29
        • 2021-10-16
        • 2014-08-17
        • 1970-01-01
        • 1970-01-01
        • 2018-12-01
        相关资源
        最近更新 更多