Java 删除被空白包围的特殊字符

Java 删除被空白包围的特殊字符,java,regex,web,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 s

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

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"

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

前瞻只是一个测试,不使用字符

如果要对所有标点字符执行相同的操作,可以使用unicode标点字符类:
\p{Punct}

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

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

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

前瞻只是一个测试,不使用字符

如果要对所有标点字符执行相同的操作,可以使用unicode标点字符类:
\p{Punct}

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

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

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

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

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

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

 // 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
试试这个

 // 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

使用regex
[-.:?,+^](\s |$)
并使用基本字符串操作删除每个匹配项的字符。代码多了几行,但要干净得多

在纯java解决方案中,循环所有特殊字符并检查下一个字符也是非常简单的


一旦涉及到lookaheads/lookbehind,我通常会回到非正则表达式解决方案,以保持清晰。

使用正则表达式[-.:?,+^](\s |$),并使用基本字符串操作删除每个匹配的字符。代码多了几行,但要干净得多

在纯java解决方案中,循环所有特殊字符并检查下一个字符也是非常简单的



一旦涉及lookaheads/lookbehinds,我通常会退回到非正则表达式解决方案,以保持清晰。

如果圆点位于开头,如
。这是我的字符串。我从blabla.com上获得了这条字符串。
感谢@Casimir et Hippolyte和anubhava为我提供的友好而干净的帮助。它对我有用。我想知道(只是为了知识)如果字符串本身包含“?”怎么办,那么我们如何删除它,因为?在正则表达式中帮助char。我尝试了.replaceAll(“[.|::,+?]+(?!\\w)”,”;但它不起作用。@user1642500使用转义`\`字符。@user1642500我已经在我的帖子中添加了它。只要把它移到字符类的外部,就可以使用
[.:,+?]
[.:,+]\1242500\?
@user1642500:在字符类内部
没有特殊的意义,因此你可以不转义它就把它放进去:
[-.:+?\\s]
,如果这个点像
一样在开头。这是我的字符串。我从blabla.com上获得了这条字符串。
感谢@Casimir et Hippolyte和anubhava为我提供的友好而干净的帮助。它对我有用。我想知道(只是为了知识)如果字符串本身包含“?”怎么办,那么我们如何删除它,因为?在正则表达式中帮助char。我尝试了.replaceAll(“[.|::,+?]+(?!\\w)”,”;但它不起作用。@user1642500使用转义`\`字符。@user1642500我已经在我的帖子中添加了它。只需将它移到字符类之外,就可以使用
[.:,+?]
[.:,+]\1242500\?
@user1642500:在字符类内部
没有特殊意义,因此您可以不转义地放置它:
[-.:+?\\s]
其他特殊字符呢?如果点像
一样在开头。这是我的字符串。我从blabla.com上得到了这个字符串。
您必须定义不需要替换的内容。由空格包围的特殊字符不能充分描述所需内容。异常越多,正则表达式或替换逻辑就越复杂。如果它适用于
,那么你可以让它适用于任何事情。好的,不用担心。我现在明白了。我想我已经在我的帖子中添加了它。其他特殊字符呢?如果圆点在开头像那样
。这是我的字符串。我从blabla.com上得到了这个字符串。
您必须定义不需要替换的内容。由空格包围的特殊字符不能充分描述所需内容。异常越多,正则表达式或替换逻辑就越复杂。如果它适用于
,那么你可以让它适用于任何事情。好的,不用担心。我现在明白了。我想我已经在我的帖子中添加了它。谢谢@anubhava的帮助。我添加了关于删除的评论?性格我们该怎么做呢?只需要在字符类中添加
。请参阅编辑后的答案。它在没有
\\?
的情况下应该可以工作。您的输入字符串是什么?谢谢@anubhava的帮助。我添加了关于删除的评论?性格我们该怎么做呢?只需要在字符类中添加
。请参阅编辑后的答案。它应该在没有
\\?
输入字符串的情况下工作?