2014-10-19 2 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

use * вместо {3} – maskacovnik

+1

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

+0

Существуют ли случаи, когда слова могут начинаться с апострофов? Может ли быть больше, чем апостроф в слове? – Pshemo

ответ

4

Но вы знаете это слово:

  1. содержит гольцов до апострофа
  2. апостроф
  3. более полукокса (s)

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

1

Эта закономерность:

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

соответствует любой последовательности букв/апострофа, содержащей, по меньшей мере, один апостроф.

Поэтому он будет соответствовать даже такие вещи, как:

  • О'Нила в «винтовкой полковника О'Нила.»
  • «п» в «Рыба чипс»
1

Попробуйте это:

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

С помощью этого регулярного выражения вы сопрягать слова с двумя или более буквами и апострофом и необязательным письмом после апострофа. Вы можете изменить минимальные/максимальные буквы в [a-zA-Z]{2,}, а в последней части указателя звездочки вы можете использовать {min,max}, чтобы точно указать

Смежные вопросы