Extraire des nombres d'une chaîne à l'aide d'expressions régulières Java

Les exemples suivants montrent comment extraire des nombres d'une chaîne à l'aide d'expressions régulières en Java.

Être capable d'analyser des chaînes et d'en extraire des informations est une compétence clé que tout testeur devrait posséder. Ceci est particulièrement utile lors du test des API et vous devez analyser un JSON ou réponse XML.

Les exemples d'expressions régulières Java suivants se concentrent sur l'extraction de nombres ou de chiffres d'une chaîne.




Extraire tous les nombres d'une chaîne

import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexExamples {
public static void main(String[]args) {
Pattern p = Pattern.compile('\d+');
Matcher m = p.matcher('string1234more567string890');
while(m.find()) {

System.out.println(m.group());
}
} }

Production:

1234 567 890

En rapport:




Extraire le nième chiffre d'une chaîne

Si vous souhaitez extraire uniquement certains nombres d'une chaîne, vous pouvez fournir un index vers group() une fonction.

Par exemple, si nous voulions extraire uniquement le deuxième ensemble de chiffres de la chaîne string1234more567string890, c'est-à-dire 567 alors nous pouvons utiliser:

import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexExamples {
private static final Pattern p = Pattern.compile('[^\d]*[\d]+[^\d]+([\d]+)');
public static void main(String[] args) {
// create matcher for pattern p and given string
Matcher m = p.matcher('string1234more567string890');

// if an occurrence if a pattern was found in a given string...
if (m.find()) {

System.out.println(m.group(1)); // second matched digits
}
} }

Production:

567

Explication du motif [^d]*[d]+[^d]+([d]+)


  • ignorer tout non-chiffre
  • ignorer n'importe quel chiffre (premier nombre)
  • ignorez à nouveau tout non-chiffre
  • capturer le deuxième nombre


Extraire le numéro d'un attribut de balise

Lorsqu'il s'agit de balises XML ou HTML, il est parfois nécessaire d'extraire une valeur d'un attribut. Par exemple, considérez la balise suivante

Pour extraire le nombre 9999 nous pouvons utiliser le code suivant:

import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexExamples {
public static void main(String[]args) {
Pattern pattern = Pattern.compile('numFound='([0-9]+)'');
Matcher matcher = pattern.matcher('');

if (matcher.find()) {

System.out.println(matcher.group(1));
}
} }

Production:


9999

Extraire une chaîne contenant des chiffres et des caractères

Vous pouvez utiliser des expressions régulières Java pour extraire une partie d'une chaîne contenant des chiffres et des caractères. Supposons que nous ayons cette chaîne Sample_data = YOUR SET ADDRESS IS 6B1BC0 TEXT et nous voulons extraire 6B1BC0 lequel est 6 caractères de long , on peut utiliser:

import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexExamples {
public static void main (String[] args) {
Pattern p = Pattern.compile('YOUR SET ADDRESS IS\s+([A-Z0-9]{6})');
Matcher n = p.matcher('YOUR SET ADDRESS IS 6B1BC0 TEXT');
if (n.find()) {

System.out.println(n.group(1)); // Prints 123456
}
} }

Production:

6B1BC0

Extraire des paires clé-valeur avec des expressions régulières

Supposons que nous ayons une chaîne de ce format bookname=testing&bookid=123456&bookprice=123.45 et nous voulons extraire la paire clé-valeur bookid=123456 nous utiliserions:

import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexExamples {
public static void main(String[] args) {
String s = 'bookname=cooking&bookid=123456&bookprice=123.45';
Pattern p = Pattern.compile('(?<=bookid=)\d+');
Matcher m = p.matcher(s);
if (m.find()) {

System.out.println(m.group());
}
} }

Production:


123456