4

我想使用模式匹配从 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

4 回答 4

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

于 2013-04-02T12:14:32.390 回答
0

用这个

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

您的解决方案的问题是您正在使用\b它在单词的末尾和开头期待一个字符,因此它不适用于您的情况。

/b

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

参考正则表达式

于 2013-04-02T08:27:45.913 回答
0

试试这个正则表达式:

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

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

于 2013-04-02T12:26:41.493 回答
0

测试用例是:

asd df R# $R $$ $ 435 4ee 4 hey buddy 这是我想要的测试

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

上述代码的输出是:

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

注意在第二个中缺少四个。第二个正则表达式摆脱了不知道单个数字是否计数的数字

于 2013-04-15T00:59:22.933 回答