java - 仅当不在单词内时才从字符串中删除特殊字符
问题描述
我想替换字符串中的所有特殊字符,但前提是不在单词中。
特殊字符:<>{}\"/|;:.,~!?@#$%^=&*'
例子:
String str = "//won't won't wo/'n't wont wont'."
str.replaceAll(,"") // "won't won't won't wont wont"
任何人都知道如何通过正则表达式实现这一点?
解决方案
这个正则表达式:
(?<!\w)\W+|\W+(?!\w)
匹配两个备用正则表达式中的任何一个。(1|2)
\W
前面没有单词字符 (\w
)的任何特殊字符(非单词字符:)- 后面没有单词字符的任何特殊字符。
这是有效的,因为如果任何一个匹配,则特殊字符不能在一个单词中
“先于”:积极的向后看。 (?<=y)X
: X 前面有 y
“不在前面”:否定的向后看。 (?<!y)X
: X 前面没有 y
“后跟”:正向前瞻。 X(?=y)
: X 后跟 y
“不跟”:负前瞻。 X(?!y)
: X 后面没有 y。
您应该\W
用您的一组特殊字符替换(适当转义)
这个解决方案需要注意的一点是它不依赖于空白的存在。
推荐阅读
- python - Python:在 2D numpy 数组中搜索子列表
- python - 子采样数据,使得从包含 N 个类的巨大数据集中选择至少 K 个类
- xaml - 图像不会在 Xamarin Forms 中显示
- stripe-payments - 如果我只想在购买时保存用户的信用卡,则有关 `setup_future_usage: "off_session"` 和 `confirmCardSetup` 的条纹差异
- linux - 按特定顺序多线程处理文件的算法
- python-3.x - 为什么我的函数返回 None 而不是数字?
- javascript - 按字母顺序排列对象数组中的对象数组
- php - 如何从 foreach 循环中获取变量?
- javascript - 尝试使用默认配置和运行时未找到预设的 vue-test-utils-getting-started
- c++ - MFC 中的窗口消息管理:是否必须添加基类调用?