Извлечение чисел из строки с помощью регулярных выражений Java

Ниже приведены примеры, показывающие, как извлекать числа из строки с помощью регулярных выражений в Java.

Умение анализировать строки и извлекать из них информацию - ключевой навык, которым должен обладать каждый тестировщик. Это особенно полезно при тестировании API, и вам необходимо разобрать JSON или ответ XML.

В следующих примерах регулярных выражений Java основное внимание уделяется извлечению чисел или цифр из строки.

Извлечь все числа из строки

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());
}
} }

Выход:

1234 567 890

Связанный:

Извлечь n-ю цифру из строки

Если вы хотите извлечь из строки только определенные числа, вы можете указать индекс для group() функция.



Например, если мы хотим извлечь только второй набор цифр из строки string1234more567string890, то есть 567 тогда мы можем использовать:

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
}
} }

Выход:

567

Объяснение шаблона [^d]*[d]+[^d]+([d]+)

  • игнорировать любые нецифровые
  • игнорировать любую цифру (первое число)
  • снова игнорировать любые нецифровые
  • захватить второй номер

Извлечь номер из атрибута тега

При работе с тегами XML или HTML иногда возникает необходимость извлечь значение из атрибута. Например, рассмотрим следующий тег

Чтобы извлечь номер 9999 мы можем использовать следующий код:

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));
}
} }

Выход:

9999

Извлечь строку, содержащую цифры и символы

Вы можете использовать регулярные выражения Java для извлечения части строки, содержащей цифры и символы. Предположим, у нас есть эта строка Sample_data = YOUR SET ADDRESS IS 6B1BC0 TEXT и мы хотим извлечь 6B1BC0 который Длиной 6 символов , мы можем использовать:

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
}
} }

Выход:

6B1BC0

Извлечение пар ключ-значение с помощью регулярных выражений

Предположим, у нас есть строка такого формата bookname=testing&bookid=123456&bookprice=123.45 и мы хотим извлечь пару ключ-значение bookid=123456 мы будем использовать:

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());
}
} }

Выход:

123456