2014-10-19 60 views
0

我需要从文本文件中提取带撇号的单词。我有一个程序,提取他们的长度是一定量的话(在下面的程序3),并有撇号。不过,我需要一个人只考虑,而不考虑任何其他条件的撇号单词。仅从文本文件中提取带撇号的单词

public static void main(String[] args) throws IOException { 
    ArrayList<String> words = new ArrayList<String>(); 

    String s = "I want to have a lot of money's when I am older."; 
    Pattern p = Pattern.compile("[a-zA-Z']{3,}"); 
    Matcher m = p.matcher(s); 
    while (m.find()) { 
     words.add(m.group()); 
    } 
    System.out.println(words); 
+0

使用*代替{3,} – maskacovnik 2014-10-19 18:39:00

+1

'“[a-zA-Z'] *'[ a-zA-Z'] *“' – khelwood 2014-10-19 18:40:34

+0

有些情况下,单词可以用撇号开头吗?有没有比单词更多的撇号? – Pshemo 2014-10-19 18:41:25

回答

4

但是你知道这个词的:

  1. 包含撇号前字符
  2. 撇号
  3. 多个字符(S )

Pattern p = Pattern.compile("\\w*'\\w*");

1

这种模式:

"[a-zA-Z']*'[a-zA-Z']*" 

匹配字母/撇号的任何序列,含有至少一个撇号。

因此它将匹配,即使这样的事情:

  • 奥尼尔在“奥尼尔上校的步枪。”
  • '否' “鱼 'N' 芯片”
1

试试这个:

Pattern p = Pattern.compile("[a-zA-Z]{2,}'[a-zA-Z]*"); 

有了这个正则表达式,你有两个或多个字母匹配的话,撇号和可选字母撇号后。您可以更改[a-zA-Z]{2,}中的最小/最大字母,并在星号的最后部分您可以使用{min,max}精确指定