2013-11-18 4 views
1

Я использую Java regex, и мне нужно совместить два слова, но между этими словами может появиться пробел или другое слово, например. «энергетическая энергия», «энергия энергии», «энергия для энергии». Я должен получить все варианты «энергетической энергии». Является ли это возможным?Regex соответствует двум словам

Кроме того, мне нужно иметь что-то вроде «pow * ener *», чтобы поймать все двойные слова, начинающиеся с con pow и ener. Например, «полномочия для энергий».

ответ

0

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

/(?=power)(?=energy)/i 
3

Используйте простой wild card между двумя словами в узорах:

"power(.*?)energy" или просто "power.*energy"

0

Следующая

Pattern pattern = Pattern.compile("(\\bpow\\w+)(.*?)(\\bener\\w+)"); 
Matcher matcher = pattern.matcher("Test powers test energies test."); 
if(matcher.find()) { 
    System.out.println(matcher.group()); 
} 

гравюр powers test energies. Он должен работать с другими вариантами, которые вы опубликовали. Очевидно, это даст вам ложные срабатывания, если слова начинаются с pow, но это то, что вам казалось нужным в вопросе.

0

Вы можете попробовать эту модель:

\\bpowers?\\s+(?:\\w+\\s+){0,2}energ(?:y|ies)\\b 

примечание: если вы хотите, вы можете позволяет более чем два слова между «власть» и «энергия» увеличение (или уменьшение) значения кванторное в фигурных скобках.

\\b - это граница слова, чтобы избежать наличия других букв (или цифр или подчеркивания) после или перед словом.

0

, если вам нужно захватить слова "власть", "энергия" и вариации в группах, вы можете использовать:

(pow\S+\b).*(ener\S+\b) 

В Java:

Pattern pattern = Pattern.compile("(pow\\S+\\b).*(ener\\S+\\b)"); 
Matcher matcher = pattern.matcher("powers of energies"); 
if(matcher.find()) { 
    int count = matcher.groupCount(); 
    for(int i=1;i<=count;i++){ 
     System.out.println(matcher.group(i)); 
    } 

см http://ideone.com/eNY3br

+0

Спасибо , последняя проблема состоит в том, что (pow \ S + \ b). * (ener \ S + \ b) также соответствует еще 2 словам между pow и ener. Мне нужно только пространство или почти 1 слово. – user3004412

+0

вы можете попробовать: '(pow \ S +) \ s {0,1} \ w * \ s {0,1} (ener \ S +)'. Это будет соответствовать «энергетическим энергиям» и «силе энергий», но не «силе моих энергий» –

+0

Спасибо, это работает, но у меня последний вопрос, в документ, на котором я работаю, я пытался написать силу, как последнее слово строка и энергия, как первое слово следующего ряда. В этом случае он не работает. Есть ли у вас какие-либо идеи? Спасибо за все – user3004412

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