我想从java String中提取所有单词。
单词可以用任何欧洲语言书写,不包含空格,只包含字母符号。
它可以包含连字符。
答案 0 :(得分:3)
如果您不依赖于正则表达式,请查看BreakIterator,特别是getWordInstance()方法:
单词边界分析由搜索和替换功能以及文本编辑应用程序使用,允许用户通过双击选择单词。单词选择可以正确解释单词内和单词后面的标点符号。不属于单词的字符(如符号或标点符号)在两边都有单词分隔符。
答案 1 :(得分:2)
您可以使用(?<!\S)\S+(?!\S)
的变体,即任何非空白字符的最大序列。
\S
替换您自己的角色类来寻找更具体的内容
[A-Za-z-]
等)这是一个简单的例子来说明这个想法,使用[a-z-]
作为字母字符类:
String text = "--xx128736f-afasdf2137asdf-12387-kjs-23xx--";
Pattern p = Pattern.compile(
"(?<!alpha)alpha+(?!alpha)".replace("alpha", "[a-z-]")
);
Matcher m = p.matcher(text);
while (m.find()) {
System.out.println(m.group());
}
打印:
--xx
f-afasdf
asdf-
-kjs-
xx--
您可能必须使用Unicode字符类等(保持现状,立即研究主题)
答案 2 :(得分:0)
这将匹配一个单词:
`([^\s]+)`