如何删除侧面有空格的特殊字符。
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"
答案 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解决方案,你循环遍历所有特殊字符并检查下一个字符也很简单。
一旦涉及前瞻/后视,我通常会回到非正则表达式的解决方案。