2014-06-17 5 views
2

Je sais que cette question a été posée plusieurs fois sur Stack Overflow mais regex est trop difficile à comprendre.Comment extraire et remplacer un motif particulier d'une chaîne en utilisant regex?

Ce que j'ai essayé:

String sentence = "The #{adjective} brown fox jumps over the lazy dog"; 
      String requierd_sentence = sentence.replaceAll("[{*.*}]", "quick"); 
      System.out.println(requierd_sentence); 

Ici, dans cette phrase, les adjectifs ne sont pas en position fixe - ils changent à chaque nouvelle chaîne/phrase. Ce que je dois faire est de remplacer l'adjectif par la chaîne requise qui est disponible dans une autre colonne en plus de la colonne de la phrase. Récupérer la chaîne de la colonne est OK, mais la correspondance de regex échoue sur de nombreuses tentatives.

Quelle serait l'expression rationnelle correcte pour #{any string}?

  1. Exemple de sortie pour chaîne ci-dessus serait = The quick brown fox jumps over the lazy dog.
  2. Une autre entrée exemple, All that #{adjective} is not gold devrait sortie All that glitters is not gold.

Maintenant, les deux phrases ci-dessus ont #{adjective} sur différentes positions de la phrase, donc je peux » t utiliser split. Je dois utiliser un motif regex.

+0

Donne un exemple d'entrée et de sortie. Cela aurait plus de sens que des explications multiples de la production attendue. – TheLostMind

+0

Evite correctement les phrases '[' et '{': 'phrase.replaceAll (" \\ [\\ {*. *}] "," Rapide ");'. –

Répondre

2

Vous pouvez utiliser (voir demo):

String replaced = your_original_string.replaceAll("#\\{[^}]*}", "quick"); 

Comment ça marche?

  • Les #\\{ correspond aux caractères littérales *{
  • La classe de caractère négatif [^}]* correspond à tous les caractères qui ne sont pas une accolade fermante
  • Le } correspond à une accolade fermante
  • Nous remplaçons tout cela avec " rapide "
+0

Superbe! ça a marché, mais l'explication n'est pas bonne. Cependant, 3 acclamations pour l'esprit, que vous avez voulu donner juste pas la réponse mais l'explication aussi, pour que les gens puissent apprendre. Pouvez-vous l'expliquer de meilleure façon. – paul

+0

@paul Complètement réécrit l'explication. Est-ce que ça marche pour toi? Faites le moi savoir. :) – zx81

+0

Merci, compris. Upvote pour la démo, c'est une excellente chose à apprendre 'regex'. – paul

Questions connexes