删除白色空间包围的特殊字符

时间:2014-04-26 11:47:20

标签: java regex web

如何删除侧面有空格的特殊字符。

String webcontent = "This is my string. i got this string from blabla.com."

当我使用这个正则表达式时

webcontent.replaceAll("[-.:,+^]*", "");

就像这样

String webcontent = "This is my string i got this string from blablacom"

这不是我想要的

"This is my string i got this string from blabla.com"

4 个答案:

答案 0 :(得分:2)

您必须使用前瞻(?=...)(后跟)测试是否存在白色字符或字符串的结尾:

webcontent.replaceAll("[-.?:,+^\\s]+(?:(?=\\s)|$)", "");

前瞻只是一种测试,不会消耗字符。

如果你想对所有标点字符做同样的事情,你可以使用unicode标点符号charcater类:\p{Punct}

webcontent.replaceAll("[\\p{Punct}\\s+^]+(?:(?=\\s)|$)", "");

(请注意,+^不是标点字符。)

答案 1 :(得分:1)

您可以使用否定前瞻来避免这种情况:

webcontent = webcontent.replaceAll("[-.:?,+^]+(?!\\w)", "");
//=> This is my string i got this string from blabla.com

答案 2 :(得分:1)

试试这个

 // any one or more special characters followed by space or in the end
 // replace with single space

 webcontent.replaceAll("[-.:,+]+(\\s|$)", " ").trim();

- 编辑 -

如果特殊字符在开头

 webcontent.replaceAll("^([-.:,+]+)|[-.:,+]+(\\s|$)", " ").trim();

输入:

.This is my string. i got this string from blabla.com.        

输出:

This is my string i got this string from blabla.com

- 编辑 -

我想替换?

webcontent.replaceAll("^([-.:,+]+|\\?+)|([-.:,+]+|\\?+)(\\s|$)", " ").trim();

输入

..This is my string.. ?? i got this string from blabla.com..

输出

This is my string  i got this string from blabla.com

答案 3 :(得分:0)

使用正则表达式[-.:?,+^](\s|$)并使用基本字符串操作删除每个匹配项的字符。它还有更多代码,但更清晰。

一个纯java解决方案,你循环遍历所有特殊字符并检查下一个字符也很简单。

一旦涉及前瞻/后视,我通常会回到非正则表达式的解决方案。