从字符串中提取单词的正则表达式

时间:2010-06-29 09:26:04

标签: java regex text-segmentation

我想从java String中提取所有单词。

单词可以用任何欧洲语言书写,不包含空格,只包含字母符号。

它可以包含连字符。

3 个答案:

答案 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]+)`