2010-01-20 5 views
0

Je suis en train de se déshabiller et remplacer une chaîne de texte qui se présente comme suit de la manière la plus élégante possible:La façon la plus élégante pour enlever et remplacer un modèle de chaîne

element {"item"} {text { 
      } {$i/child::itemno} 

ressembler à:

<item> {$i/child::itemno} 

Suppression du texte de l'élément en lui substituant ses accolades et en supprimant le texte et ses accolades. Ces modèles peuvent être modifiés plusieurs fois. Suis-je préférable d'utiliser java.util.regex.Pattern de Java OU le simple replaceAll OR org.apache.commons.lang.StringUtils?

Merci pour les reponses:

Je suis maintenant le suivant, mais je ne suis pas sûr que le nombre de barres obliques inverses et aussi comment remplir la substitution finale qui utilise mon groupe (1) et le remplace par < à son début et> à sa fin:

Pattern p = Pattern.compile("/element\\s*\\{\"([^\"]+)\"\\}\\s*{text\\s*{\\s*}\\s*({[^}]*})/ "); 
      // Split input with the pattern 
     Matcher m = p.matcher("element {\"item\"} {text {\n" + 
       "   } {$i/child::itemno} text { \n" + 
       "   } {$i/child::description} text {\n" + 
       "   } element {\"high_bid\"} {{max($b/child::bid)}} text {\n" + 
       "  }} "); 

      // For each instance of group 1, replace it with < > at the start and end 

Répondre

0

Je pense qu'un simple remplacement de chaîne suffira. Voici une version Python (peut être transformé en une seule ligne):

>>> a = """element {"item"} {text { 
      } {$i/child::itemno}""" 
>>> 
>>> a 
'element {"item"} {text {\n   } {$i/child::itemno}' 
>>> a=a.replace(' ', '').replace('\n', '') 
>>> a 
'element{"item"}{text{}{$i/child::itemno}' 
>>> a = a.replace('element {"', '<') 
>>> a 
'element{"item"}{text{}{$i/child::itemno}' 
>>> a = a.replace('element{"', '<') 
>>> a 
'<item"}{text{}{$i/child::itemno}' 
>>> a = a.replace('"}{text{}', '> ') 
>>> a 
'<item> {$i/child::itemno}' 
>>> 
+0

Désolé, je suis nouveau à regex, comment Cela peut-il être combiné en une seule ligne? – Pablo

1

Recherche:

/element\s*\{"([^"]+)"\}\s*{text\s*{\s*}\s*({[^}]*})/ 

Remplacer:

"<$1> $2" 
+0

Merci pour votre réponse, une idée de comment cela pourrait se traduire en Java? Particulièrement l'identification de <$1> – Pablo

+0

@pablo: parenthèse. '([^"] +) 'Et' ({[^}] *}) ' –

+0

Merci, comment puis-je effectuer un remplacement de <$1> consdering il doit fournir équerres de chaque côté du premier groupe? – Pablo

Questions connexes