首页 > 解决方案 > 仅当不在单词内时才从字符串中删除特殊字符

问题描述

我想替换字符串中的所有特殊字符,但前提是不在单词中。

特殊字符:<>{}\"/|;:.,~!?@#$%^=&*'

例子:

String str = "//won't won't wo/'n't wont wont'."
str.replaceAll(,"") // "won't won't won't wont wont"

任何人都知道如何通过正则表达式实现这一点?

标签: javaregex

解决方案


这个正则表达式:

(?<!\w)\W+|\W+(?!\w)

匹配两个备用正则表达式中的任何一个。(1|2)

  1. \W前面没有单词字符 ( \w)的任何特殊字符(非单词字符:)
  2. 后面没有单词字符的任何特殊字符。

这是有效的,因为如果任何一个匹配,则特殊字符不能在一个单词中

“先于”:积极的向后看。 (?<=y)X: X 前面有 y
“不在前面”:否定的向后看。 (?<!y)X: X 前面没有 y
“后跟”:正向前瞻。 X(?=y): X 后跟 y
“不跟”:负前瞻。 X(?!y): X 后面没有 y。

您应该\W用您的一组特殊字符替换(适当转义)

这个解决方案需要注意的一点是它不依赖于空白的存在。


推荐阅读