2013-01-04 4 views
0

Quel est votre nom? Comment allez-vous? Je suis en chemin. Où es-tu? Avez-vous faim? Je vous aime bien.Recherche de la phrase 'wh' dans un paragraphe donné en utilisant des expressions régulières en Java

Dans le paragraphe ci-dessus, la réponse devrait choisir toutes les questions wh comme "Quel est votre nom? Où êtes-vous?"

Comment atteindre ci-dessus en utilisant l'expression régulière dans Java?

+0

Quelle partie avez-vous problème avec? Construire l'expression rationnelle ou utiliser une bibliothèque regex en Java? Puisque vous avez étiqueté 'nsregularexpression' - avez-vous besoin d'utiliser cette bibliothèque, ou suffit-il d'utiliser le regexen JFC standard? –

+0

Je veux juste trouver un point d'interrogation (?) D'abord puis parmi eux je veux extraire les questions Wh en utilisant l'expression regula – user1949167

+0

Pourquoi ne pas utiliser une regex pour toute la question, alors attention à la position du point d'interrogation? Si vous voulez utiliser des regex (pas qu'ils sont nécessaires ici), faites-le complètement. –

Répondre

3

Ok, j'ai testé ce code, donc ça devrait marcher maintenant. Il cherche tous les mots Wh que je pourrais penser dans la langue anglaise, au lieu d'essayer de trouver Wh lui-même en un mot.

String text = "What is your name? How do you do? I am in way. Where are you? Are you hungry? I like you. What about questions that contain a comma, like this one? Do you like my name, Whitney Houston? What is going to happen now, is you are going to do what I say. Is that clear? What's all this then?"; 

Pattern p = Pattern.compile("(?:Who|What|When|Where|Why|Which|Whom|Whose)(?:'s)?\\s+[^\\?\\.\\!]+\\?"); 
Matcher m = p.matcher(text); 

List<String> questions = new ArrayList<String>(); 
while (m.find()) questions.add(m.group()); 

for (String question : questions) System.out.println(question); 

Je viens de réaliser qu'il pourrait y avoir une question commençant par Who's, il permet maintenant 's après le mot Wh.

+0

Qu'en est-il des questions contenant une virgule, comme celle-ci? –

+0

'Tu aimes mon nom, Whitney'? correspond 'Whitney?'. Ça ne devrait pas. –

+0

Ok, je l'ai réparé pour éviter ces problèmes. – jackcogdill

1

Version simple (pour phrase exemple OP) ...

Pattern p = Pattern.compile("Wh[^\\?]*\\?"); 
    Matcher m = p.matcher(s); 
    while (m.find()) { 
      System.out.println(m.group()); 
    } 

Pour une correspondance plus avancée (Wh assure la parole est au début de la phrase) ...

Pattern p = Pattern.compile("(^|\\?|\\.) *Wh[^\\?]*\\?"); 
    Matcher m = p.matcher(s); 
    while (m.find()) { 
      String match = m.group().substring(m.group().indexOf("Wh")); 
      System.out.println(match); 
    } 
Questions connexes