正则表达式替换除字母表之外的所有内容

时间:2012-11-11 07:43:02

标签: java regex

什么是简洁的常规正则表达式,以从非字母表的字符串中删除所有内容

        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    int T=0; 
    try{
        T= Integer.parseInt(br.readLine());

        while(T>0)
                String input=br.readLine();
                **String res= input.replaceAll("^[a-zA-Z]"," " );**
                System.out.println(res);

也试过

      input.replaceAll("[^a-zA-Z]]"," " )

它们都没有从输入字符串中替换任何内容。输入字符串保持原样

编辑:

         input.replaceAll("[^a-zA-Z]"," " )  //works well
         input.replaceAll("^[a-zA-Z]"," " )  //replaces first char of string

2 个答案:

答案 0 :(得分:4)

你需要:

input = input.replaceAll("[^a-zA-Z]"," " );
^^^^^^^                          ^ ^

您需要将input引用指向replaceAll方法返回的String对象,以获取更改的字符串,因为字符串是不可变的。

范围A-z不是您想要的。您需要A-Z

您的模式中还有额外的]

See it

答案 1 :(得分:3)

input.replaceAll("[^a-zA-z]","")是String常量池中的新字符串,您不会使用此新内容设置字符串。请使用此:

input = input.replaceAll("[^a-zA-z]","");