用正则表达式java分割文本

时间:2017-06-02 08:42:22

标签: java regex

我想在正则表达式的帮助下拆分文本,然后从新行在控制台中写下每个单词。但是有一个问题,这个email@mail.org不被视为一个词,我不知道应该是什么。我尝试使用前瞻性正则表达式,但它没有帮助。我应该使用额外的if语句来定义单词还是只在我的正则表达式中添加一些内容? 代码:

Pattern p = Pattern.compile("\\s+[A-Za-z]++");
        Matcher m = p.matcher(text);
        while (m.find())
        {
                String s = m.group().replaceAll("\\s++", "");
                System.out.println(s);
        }

2 个答案:

答案 0 :(得分:1)

如果您只想将每个单词与文本隔离并将其打印到控制台,则可以使用String#split(String regex)并拆分任意数量的空白:

String[] words = text.split("\\s+");
for (String word : words) {
    System.out.println(word);
}

这里的逻辑集中于分隔单词的空白,而不是担心每个实际单词如何匹配。

答案 1 :(得分:0)

如果你想拆分不是大写或小写字母的任何东西,例如分割你可以使用的数字,空格和符号:

String[] words = "some sentence".split("\\W+");

基本上与您在原始问题中尝试做的相反,提供黑名单而不是允许字符的白名单。

如果你想允许email@mail.org12th这样的场景并将它们分类为单词,你可以只分割空格或句子结尾字符

String[] words = "some sentence".split("([\\W\\s]*\\s+)");

这将拆分以下内容:

email@mail.org x变为email@mail.orgx

hello world变为helloworld

hello, world变为helloworld

hello; world变为helloworld

hello (world)变为helloworld以及(确保过滤掉空组件)

hello. World变为helloworld