3

我想从 java 字符串中提取所有单词。

word 可以用任何欧洲语言书写,并且不包含空格,仅包含字母符号。

它可以包含连字符。

4

3 回答 3

3

如果您不依赖正则表达式,还可以查看BreakIterator,特别是getWordInstance()方法:

搜索和替换功能以及允许用户通过双击选择单词的文本编辑应用程序使用单词边界分析。单词选择可以正确解释单词内和单词后的标点符号。不属于单词的字符(例如符号或标点符号)在两侧都有分词符。

于 2010-06-29T12:16:54.147 回答
2

您可以使用 的变体(?<!\S)\S+(?!\S),即任何最大的非空白字符序列。

  • 使用否定的lookarounds,以便它可以匹配字符串开头和结尾的“单词”
  • 替换你自己的字符类\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 字符类等(留在原地,现在正在研究主题)

于 2010-06-29T09:33:20.427 回答
0

这将匹配一个单词:

`([^\s]+)`
于 2010-06-29T09:34:17.940 回答