gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:13:39 24 4
gpt4 key购买 nike

我需要过滤给定的文本以获取所有单词,包括撇号(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com