java - 如何优化此正则表达式以在空格和标点符号上分割线(减去撇号)
问题描述
我正在尝试在空格和标点符号上拆分文本行,我已经设法做到了,但它现在在生成的拆分行数组中也包含空格:
public static void main(String[] args) {
String test = "tim's work 'cool' asdas 'right' three-year-old 123123.";
String rePattern = "[?,.!\\s]|(?<=\\s)\\'|\\'(?=[^a-zA-Z])";
String[] arr = test.split(rePattern);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
例如,上面的 spit 将打印:
tim's
work
cool
asdas
right
所以看起来我正在设法正确地分割标点符号,但它仍然在数组中包含空字符串。如何优化我的正则表达式,使其在拆分时不包含空字符串?
解决方案
一种选择是'
在每一边用可选的 s 包围空格/句子终止字符集,确保s 在可能的情况下与空格/句子终止符一起'
被消耗:split
String rePattern = "'?[?,.!\\s]'?";
输出:
tim's
work
was
cool
asdas
right
请注意,在正则表达式中不需要转义'
s,至少在字符串分隔符为 的 Java 中不需要转义"
。此外,除非您希望使用除纯空格以外的其他空格(例如,换行符、制表符或类似的东西),否则您可以只使用文字空格而不是\\s
,如果您喜欢,它更精确和简洁(例如String rePattern = "'?[?,.! ]'?";
)
推荐阅读
- spring-boot - Springdoc - 如何将 externalDocs 添加到 OpenAPI swagger UI 自动生成的文档
- php - Wordpress - 如果手动输入,数组不被视为数组
- php - 字符可见但不可选择/可突出显示
- java - 在 SharedPreferences 中存储访问令牌会返回空对象引用错误
- java - Anagram制作程序的JUnit测试?
- python - 如何让列表框打印包含项目名称和价格的字典 - Python
- selenium - 使用 Selenium + Chrome 驱动程序 + Browsermob 代理登录仅在我添加另一个代理时才有效 -> 为什么?
- javascript - 使用 Bootstrap 轮播错误消息获取无法读取未定义的属性“offsetWidth”
- c# - 如何使用 C# 模式匹配与元组
- c++ - 带有 Clang 10 的显式模板实例化的 ~queue 的未定义引用