使用java模式匹配删除单个字母单词

时间:2013-04-02 08:08:40

标签: java regex pattern-matching

我想使用模式匹配从Java中删除字符串中的所有单字母单词。我的编码如下:

    String str = "P@";

    //remove single char words and extra white spaces
    inputStr = inputStr.replaceAll("\\b[\\w']{1}\\b", "").replaceAll("\\s+", " ").trim();

我希望输出为P @,因为输入不是单个字母。但我得到输出为@因为它消除了P.所以基本上它只考虑字母字符匹配模式。而我想根据输入字符串的长度进行匹配。

请帮忙。

4 个答案:

答案 0 :(得分:2)

尝试使用:

        String data = "asd df R# $R $$ $ 435 4ee 4";

    String replaceAll = data.replaceAll("(\\s.\\s)|(\\s.$)", " ");
    System.out.println(replaceAll);

输出为:asd df R# $R $$ 435 4ee

答案 1 :(得分:0)

使用此

str = str.replaceAll("(^.$|\\s.\\s|^.\\s|\\s.$)", "").replaceAll("\\s+", " ").trim();

你的解决方案的问题在于你使用的是\b,它期待一个字符在结尾和单词的开头,所以它在你的情况下不起作用。

/b

在单词字符(与\ w匹配的任何内容)和非单词字符(由[^ \ w]或\ W匹配的任何内容)之间以及字符串的开头和/或结尾处的位置匹配如果字符串中的第一个和/或最后一个字符是单词字符。

REFER FOR REGULAR EXPRESSION

答案 2 :(得分:0)

试试这个正则表达式:

\s([^\s]{1})\s

应该捕获单个字符的非空格,由两边的空格分隔。如果您需要接受非空白字符,例如','和'。'作为分隔符,您需要添加它们。

答案 3 :(得分:0)

测试用例是:

asd df R#$ R $$ $ 435 4ee 4嘿哥们这是我想要的测试

"[!-~]?\\b[A-z]\\b[!-~]?"
"[!-~]?\\b[\\w]\\b[!-~]?"

上述代码的输出为:

asd df $$ $ 435 4ee 4嘿伙计这是测试通缉
asd df $$ $ 435 4ee嘿伙计这是测试通缉

请注意,在第二个中,四个缺失。第二个正则表达式摆脱了数字不知道是否计算了一个数字