Ниже приведены примеры, показывающие, как извлекать числа из строки с помощью регулярных выражений в 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
Связанный:
Если вы хотите извлечь из строки только определенные числа, вы можете указать индекс для 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