2016-12-22 4 views
0

Je veux récupérer le nombre de longueur, comme 12m, 12 m, 3,2 mètres, mais ne pas obtenir la valeur des zones 3m2 ou 3m3 .... J'utilise l'expression régulière pour obtenir valeur. C'est mon expression régulière mais elle n'est pas exécutée. :(Expression régulière pour récupérer la longueur

([0-9]+[,.]*[0-9]*\s*(mét|m|cm|dm|mm|km|hm|dam|centimet)+(^[0-9]+))* 
+0

Veuillez montrer des exemples pour toutes les mesures, et aussi montrer les données dans le texte qui vous prévoyez d'utiliser. –

+0

https://www.regex101.com/r/1whTrz/1 semble fonctionner, mais sans quelques exemples, je ne connais pas l'objectif. – abc123

+0

Voulez-vous ça? https://regex101.com/r/I7mVoS/1 –

Répondre

0

Essayez

[0-9]+([,.][0-9]*)?\s*(mét|m|cm|dm|mm|km|hm|dam|centimet)\s*([^\s0-9]|\z) 

Explication:.

  • Match 1 ou plusieurs chiffres
  • correspondent en option une virgule ou point suivi par zéro ou plusieurs chiffres
  • match zéro ou plusieurs espaces
  • Correspond à une chaîne d'unités.
  • Correspond à zéro ou plusieurs espaces
  • Correspond à un caractère qui n'est pas un chiffre ou un espace ou une fin d'entrée.
0

Autre approche (chaque passage de test):

import static org.junit.Assert.*; 

import org.junit.Test; 

public class RemoveUnitSpec { 
    public static String removeUnit(String input) {  
     for (int i = 0; i < input.length(); i++) { 
      if(Character.isLetter(input.charAt(i))) { 
       return input.substring(0, i).trim(); 
      } 
     } 
     return input; 
    } 

    @Test 
    public void itShouldDoNothingWhenNoUnit() { 
     String input = "3,52"; 

     assertEquals("3,52", removeUnit(input)); 
    } 

    @Test 
    public void itShouldRemoveUnit() { 
     String input = "12m"; 

     assertEquals("12", removeUnit(input)); 
    } 

    @Test 
    public void itShouldRemoveSquareMeter() { 
     String input = "12m2"; 

     assertEquals("12", removeUnit(input)); 
    } 

    @Test 
    public void itShouldRemoveUnitWithSpace() { 
     String input = "12 m"; 

     assertEquals("12", removeUnit(input)); 
    } 

    @Test 
    public void itShouldRemoveTextualUnitWithSpace() { 
     String input = "3,2 meters"; 

     assertEquals("3,2", removeUnit(input)); 
    } 
} 
0

Je pense que j'utiliser quelque chose comme ceci:

([0-9]+(?:[,.][0-9]*)?)\s*(mét|m|cm|dm|mm|km|hm|dam|centimet)([0-9]+)? 

Vous pouvez alors obtenir chaque partie de la chaîne comme suit:

Matcher matcher = RE.matcher(string); 
if (matcher.matches) { 
    String value = matcher.group(1); 
    String unit = matcher.group(2); 
    String exp = matcher.group(3); // may be null 
    ... 
}