Регулярное выражение должно включать 1 слово - PullRequest
0 голосов
/ 01 ноября 2011

Я получил около 2000 предложений о смертельных случаях, и я хотел бы отфильтровать их по причине. Для начала я хочу начать с этих:

______ fell (*) ______ 

to the
off the
from the 

, где ______ - группа из 1 слова, а (*) - это для , для или для

Я пытался

(\w*)fell+\s+to\sthe|off\sthe|from\sthe(\w*)

возвращает «выключено» и т. Д., Но не смотрит, было ли слово «упал». (группы, вероятно, не работают ни тогда.)

Так что же не так, я использую fell+ так что упал должен быть там 1 раз, верно?

Ответы [ 2 ]

1 голос
/ 01 ноября 2011

Вам нужны круглые скобки вокруг параметров в чередовании:

(\w*)fell\s(to\sthe|off\sthe|from\sthe)(\w*)

Чтобы избежать захвата группы, используйте (?: ... ):

(\w*)fell\s(?:to\sthe|off\sthe|from\sthe)(\w*)
0 голосов
/ 01 ноября 2011

Я бы пошел с (\\w*)fell\\s[to|off|from\\sthe]\\s*(\\w*)

Вот небольшой пример:

import java.util.regex.*;
class rtest { 
    static String regex = "(\\w*)fell\\s[to|off|from\\sthe]\\s*(\\w*)";
    static Pattern pattern = Pattern.compile(regex);

    public static void main(String[] args) {
        process("Bob fell off the bike");
        process("Matt fell to the bottom");
        process("I think Terry fell from the beat of a different drum");
    }
    static void process(String text) {
        System.out.println(text);
        String[] tokens = text.split(regex);
        for(String t : tokens) System.out.println(t);
        System.out.println(" ");
    }
}

Результат:

C:\Documents and Settings\glowcoder\My Documents>javac rtest.java

C:\Documents and Settings\glowcoder\My Documents>java rtest
Bob fell off the bike
Bob
 the bike

Matt fell to the bottom
Matt
 the bottom

I think Terry fell from the beat of a different drum
I think Terry
 the beat of a different drum
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...