Rechercher : dans
Par :

[Java] (regex?) extraire une sous chaîne

Dernière réponse le 13 nov 2009 à 12:12:05 bizu53, le 29 mar 2009 à 14:58:06 
 Signaler ce message aux modérateurs

Bonjour,

Je voudrais extraire une sous-chaîne se situant entre 2 balises.
J'ai un String comme : "<name>toto</name>" et je voudrais en extraire "toto".
Je suis sûr que c'est bidon mais c'est pas mon truc les expressions régulières en Java.

Merci d'avance à celui (ou celle) qui saura me dire comment faire ça :)

Configuration: Windows XP
Firefox 3.2

Meilleures réponses pour « [Java] (regex?) extraire une sous chaîne » dans :
Liste doublement chaînée VoirLISTES DOUBLEMENT CHAINÉES Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la liste IV. Opérations sur les listes doublement chaînées A. Initialisation B. Insertion d'un élément dans la...
PHP - Nettoyer une chaîne de caractères VoirVoici une fonction en PHP qui peut être assez pratique, surtout quand on fait de l'URL Rewriting. Cette fonction permet de transformer les caractères de n'importe quelle chaîne de caractères en chaîne non accentuée, en enlevant les caractères...
Javascript - L'objet RegExp VoirLes particularités de l'objet RegExp L'objet RegExp est un objet permettant de manipuler des expressions régulières, c'est-à-dire des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, afin de trouver des...
Javascript - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractère Une chaîne de caractère est, comme son nom l'indique, une suite de caractères. On la représente par la suite de caractères encadrée par des guillemets simples (') ou doubles ("), sachant que les deux types de...
Java - Les types de données VoirLes primitives Java est un langage orienté objet, c'est-à-dire que les éléments manipulés sont des classes, ou plus exactement des objets, c'est-à-dire des instances de classes. Toutefois ces objets contiennent des données possèdant un type (et...

1

mkb, le 29 mar 2009 à 15:44:27

Salut,
par exemple si vous avez la chaine : chaine1="<name>toto</name>";
vous pouvez extraire la sous-chaine "toto" par la fonction subString(indice début,indice fin)
donc vous faites comme ça:
String sous-chaine=subString(6,10);

nb :6 est l'indice début de sous chaine "toto" dans la chaine1
10 est l'indice fin de sous chaine "toto" dans la chaine1

Répondre à mkb

2

bizu53, le 29 mar 2009 à 15:56:57

C'est comme ça que j'ai fait en attendant une réponse.
Mais toto varie à chaque fois, alors ça me fait compter mettre la longueur de <name>, et retirer la longueur de </name> à la longueur de la String... c'est pas très joli joli. Ce n'est pas faisable avec une regex ?

Je crois que je vais m'en contenter alors merci quand même

Répondre à bizu53

3

danimo, le 31 mar 2009 à 18:04:29

Salut,

chaine1="<name>toto</name>";

Puisqu'on a toujours <name> et </name>";
C'est possible avec indexOf (pour le début) et lastIndexOF (pour la fin):

int index1 = chaine1.indexOf(">"); nous donne l'emplacement du premier ">" et
int index2 = chaine1.lastIndexOf("<"); nous donne l'emplacement du dernier "<"


String x = chaine1.substring(chaine1.indexOf">")+1, chaine1.lastIndexOf("<"));
System.out.println("x = " + x);

Une exception StringIndexOutOfBoundsException
sera levée si les balises sont incorrectes.

Cordialement,

Dan

Répondre à danimo

4

bizu53, le 1 avr 2009 à 19:01:00

Ah oui, je n'y avais pas pensé. Merci, je vais mettre mon sujet comme résolu parce que ça me va :)

Répondre à bizu53

5

fiddy, le 1 avr 2009 à 19:38:26

Salut,
Je te donne la version avec regexp qui pourra te servir à un moment ou un autre :

import java.util.regex.*;

String aParser="<name>toto</name>";
Pattern p=Pattern.compile("<.*>(.*)<.*>");
Matcher m=p.matcher(aParser);
while(m.find()) 
   System.out.println(m.group(1));

Cdlt
Google is your friend

Répondre à fiddy

6

serialover, le 13 nov 2009 à 10:26:11

Bonjour,

question pour les génies de regexp, comme peut on extraire toutes les chaines entre #{chaine}# dans ce text :


blabla #{chaine1}# blablablablablablablablablablablabla #{chaine2}# blablablabla #{chaine3}# blablablablablablablabla


en utilisant regexp comment retourner une vecteur de string contenant chaine1, chaine2, chaine3 ??

Répondre à serialover

7

 danimo, le 13 nov 2009 à 12:12:05

Salut,

	
         String chaine = "blabla #{chaine1}# blablablablablablablablablablablabla #{chaine2}# blablablabla"
            + " #{chaine3}# blablablablablablablabla ";
         chaine = chaine.replaceAll(" ", ""); // car nous ne voulons pas les blancs
      	
         String motif = "#\\{chaine.\\}#";  // le . de chaine. signifie qu'on veut chaine suivie d'un caractère (dans notre cas chaine1 2 ou 3)
      	
         int nbreDeFois = 0;
         
         System.out.println("\nRECHERCHE DU MOTIF \""  + motif + "\""  + " dans la cha\u00eene:\n"
            + "\"" + chaine + "\"\n");
      		
         Pattern pattern = Pattern.compile(motif);
         Matcher matcher = pattern.matcher(chaine);
      	
         while(matcher.find())
         {
            nbreDeFois++;
            System.out.println("nbreDeFois: " + nbreDeFois);
         }
            
         System.out.println("\n\"" + motif + "\"" + " existe " + nbreDeFois
            + " fois dans \"" + chaine + "\"\n");


Cordialement,

Dan

Répondre à danimo