保留前2个单词和句子中的最后一个单词

时间:2012-03-21 12:15:32

标签: java regex

我想保留句子中的前两个单词和最后一个单词,包括句子末尾的问号。

  

wie ging er ook alweer allemaal mee wat drinken in Utrecht?

应该变成

当句子长达3个单词时,它也应该有用。 所以

  wt ging Utrecht?

应该保持不变

无论我尝试什么,我都会找到几封信或什么都没有,有人可以伸出援助之手吗? 我有一本关于正则表达的好书但是我没有时间直到夏天:(

4 个答案:

答案 0 :(得分:4)

试试这个......使用String.split()

String s = "wie ging er ook alweer allemaal mee wat drinken in Utrecht?";
String words[] = s.split(" ");
String firstTwo = words[0] + "  " + words[1]; // first two words
String lastOne = words[words.length - 1]; // last one

答案 1 :(得分:2)

这不适合使用正则表达式。

在Java中执行此操作的正确方法是使用BreakIterator检测“Words”并根据您的逻辑处理它们。只是拆分一个字符在所有语言中都可能在语义上不正确。

打印第一个元素:

 public static void printFirst(BreakIterator boundary, String source) {
     int start = boundary.first();
     int end = boundary.next();
     System.out.println(source.substring(start,end));
 }

打印最后一个元素:

 public static void printLast(BreakIterator boundary, String source) {
     int end = boundary.last();
     int start = boundary.previous();
     System.out.println(source.substring(start,end));
 }

在指定位置打印元素:

 public static void printAt(BreakIterator boundary, int pos, String source) {
     int end = boundary.following(pos);
     int start = boundary.previous();
     System.out.println(source.substring(start,end));
 }

答案 2 :(得分:1)

正则表达式解决方案

^((?:\w+\s+){2}).*?(\S+)$

并替换为$1$2

here on Regexr

答案 3 :(得分:0)

只需在空格上拆分并取前两个/最后一个,根据需要从前两个单词中删除标点符号,并确保长度。没有必要使用正则表达式。