java - 使用正则表达式从文本中分割单词

标签 java regex

我需要过滤给定的文本以获取所有单词,包括撇号(can't 被视为单个单词)。

Para = "'hello' world '"

我使用分割文本

String[] splits = Para.split("[^a-zA-Z']");

预期输出:

hello world

但它正在给予:

'hello' world '

我一切都正确,除了单个撇号(')和'hello'没有被上面的正则表达式过滤。

如何过滤这两件事?

最佳答案

据我所知,您正在寻找 '其中下一个或上一个字符不是字母。

我想出的正则表达式来执行此操作,包含在一些测试代码中:

String str = "bob can't do 'well'";
String[] splits = str.split("(?:(?<=^|[^a-zA-Z])'|'(?=[^a-zA-Z]|$)|[^a-zA-Z'])+");
System.out.println(Arrays.toString(splits));

说明:

(?<=^|[^a-zA-Z])' - 匹配'其中前一个字符不是字母,或者我们位于字符串的开头。
'(?=[^a-zA-Z]|$) - 匹配'其中下一个字符不是字母,或者我们位于字符串的末尾。
[^a-zA-Z'] - 不是字母或 ' .
(?:...)+ - 上述一项或多项( ?: 只是为了使其成为 a non-capturing group )。

参见this有关正则表达式查找的更多信息( (?<=...)(?=...) )。

简化:

通过使用否定环视,可以将正则表达式简化为以下内容:

"(?:(?<![a-zA-Z])'|'(?![a-zA-Z])|[^a-zA-Z'])+"

关于java - 使用正则表达式从文本中分割单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21672061/

相关文章:

java - 如何在 Spring Boot 中使用 log4j 将 INFO 记录到一个文件并将 ERROR 记录到另一个文件。

java - Ejb 查找中的类转换异常

java - 正则表达式将多个数字与一行中的空格合并

regex - bash 正则表达式 "find anything between last slash and dot"

java - 如何从字符串中捕获日期?

java - intellij idea中tomcat 7中的参数

java - pkcs12 keystore key 的 NoSuchAlgorithm

javascript - 字段验证需要正则表达式帮助

python - 检测单词中的重音(Python)

java - 使用 joda-time new period(long) 时出现 StackOverflowError