我想在正则表达式的帮助下拆分文本,然后从新行在控制台中写下每个单词。但是有一个问题,这个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);
}
答案 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.org
和12th
这样的场景并将它们分类为单词,你可以只分割空格或句子结尾字符
String[] words = "some sentence".split("([\\W\\s]*\\s+)");
这将拆分以下内容:
email@mail.org x
变为email@mail.org
和x
hello world
变为hello
和world
hello, world
变为hello
和world
hello; world
变为hello
和world
hello (world)
变为hello
和world
以及(确保过滤掉空组件)
hello. World
变为hello
和world