Java: 搜索将文本拆分为单独单词的正则表达式,包括字母、数字和字母之间的 '
Java: Searching for a Regex that splits a text into separate words, including letters, numbers and ' between letters
目前我有:text.split("[^\w+]"
但我还需要包括像这样的词:Can't
但不是像:'HEART'
我找不到将文本拆分为单词的解决方案,包括字母、数字和撇号(如果它位于其他字母之间)。谢谢
当出现 before/after 单词时去掉单个 quotes/apostrophes 可能更简单,然后使用排除撇号的初始定界符模式拆分:
String text = "Modern Talking's Hit: 'You're my heart, you're my soul', 1985";
String[] words = text.replaceAll("(?:^|\W)'|'(?:\W|$)", "").split("[^\w^']+");
System.out.println(Arrays.toString(words));
输出:
[Modern, Talking's, Hit, You're, my, heart, you're, my, soul, 1985]
您可以使用 Pattern
和 MatchResult
库来使用 \w+('\w+)?
正则表达式
列出您想要的单词,而不是拆分
import java.util.regex.Pattern;
import java.util.regex.MatchResult;
String regex = "\w+('\w+)?";
String text = "sampl'e 'text'";
String[] words = Pattern.compile(regex)
.matcher(text)
.results()
.map(MatchResult::group)
.toArray(String[]::new);
您也可以拆分为由撇号包围(或不包围)的空格
text.split("'?\s'?");
如果您想使用 \w
来匹配单词,而不是使用拆分,您可以使用单词边界并在左侧和右侧断言不是 '
。
\b(?<!')\w+(?:'\w+)*\b(?!')
在Java
String regex = "\b(?<!')\w+(?:'\w+)*\b(?!')";
String string = "Can't but not something like: 'HEART'";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println(matcher.group(0));
}
输出
Can't
but
not
something
like
目前我有:text.split("[^\w+]"
但我还需要包括像这样的词:Can't
但不是像:'HEART'
我找不到将文本拆分为单词的解决方案,包括字母、数字和撇号(如果它位于其他字母之间)。谢谢
当出现 before/after 单词时去掉单个 quotes/apostrophes 可能更简单,然后使用排除撇号的初始定界符模式拆分:
String text = "Modern Talking's Hit: 'You're my heart, you're my soul', 1985";
String[] words = text.replaceAll("(?:^|\W)'|'(?:\W|$)", "").split("[^\w^']+");
System.out.println(Arrays.toString(words));
输出:
[Modern, Talking's, Hit, You're, my, heart, you're, my, soul, 1985]
您可以使用 Pattern
和 MatchResult
库来使用 \w+('\w+)?
正则表达式
import java.util.regex.Pattern;
import java.util.regex.MatchResult;
String regex = "\w+('\w+)?";
String text = "sampl'e 'text'";
String[] words = Pattern.compile(regex)
.matcher(text)
.results()
.map(MatchResult::group)
.toArray(String[]::new);
您也可以拆分为由撇号包围(或不包围)的空格
text.split("'?\s'?");
如果您想使用 \w
来匹配单词,而不是使用拆分,您可以使用单词边界并在左侧和右侧断言不是 '
。
\b(?<!')\w+(?:'\w+)*\b(?!')
在Java
String regex = "\b(?<!')\w+(?:'\w+)*\b(?!')";
String string = "Can't but not something like: 'HEART'";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println(matcher.group(0));
}
输出
Can't
but
not
something
like