Как найти число в тексте в определенном месте с помощью регулярных выражений в Java - PullRequest
0 голосов
/ 06 января 2019

Как создать метод, который будет находить число в тексте строки. Я содержит список строк, которые содержат текст, как:

Radius of Circle is 7 cm
Rectangle 8 Height is 10 cm
Rectangle Width is 100 cm, Some text

Теперь я должен найти все числа в этих строках, которые идут перед cm, чтобы я не мог по ошибке найти другое число.

Как это может произойти

Ответы [ 3 ]

0 голосов
/ 06 января 2019

Соответствующее регулярное выражение будет:

(\d+) cm

Чтобы получить захваченное число до cm, вы можете использовать классы Pattern и Matcher:

String line = "Radius of Circle is 7 cm";
Pattern pattern = Pattern.compile("(\\d+) cm");
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
    System.out.println("Value: " + matcher.group(1));
}

Этот пример соответствует только строке из примера (1), но может быть легко повторен для каждой строки, содержащейся в вашем списке. См. Группы захвата Java Regex для получения дополнительной информации.

0 голосов
/ 06 января 2019

Правильный шаблон для использования здесь:

(\\d+)\\s+cm\\b

Для одного вкладыша мы можем попробовать использовать String#replaceAll:

String input = "Rectangle Width is 100 cm, Some text";
String output = input.replaceAll(".*?(\\d+)\\s+cm\\b.*", "$1");
System.out.println(output);

Или, чтобы найти все совпадения в данном тексте, мы можем попробовать использовать формальное сопоставление с шаблоном:

String input = "Rectangle Width is 100 cm, Some text";
String pattern = "(\\d+)\\s+cm\\b";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(input);
while (m.find()) {
    System.out.println("Found measurement: " + m.group(1));
}
0 голосов
/ 06 января 2019

Вы должны найти группы только с цифрами в строке, используя следующее регулярное выражение:

(?:\d{1,})
  • \ d {1,} соответствует цифре (равной [0-9])
  • {1,} Quantifier - соответствует от одного до неограниченного количества раз, столько раз, сколько возможно, возвращая при необходимости
  • (? :) Группа захвата

Main ##

import java.util.regex.Pattern;  
import java.util.Scanner;  
import java.util.regex.Matcher;    
public class RegexExample{    
    public static void main(String[] args){    
        Scanner sc=new Scanner(System.in);  
        while (true) {    
            Pattern pattern = Pattern.compile("(?:\\d{1,})");    
            System.out.println("Enter text:");  
            Matcher matcher = pattern.matcher(sc.nextLine());    
            boolean found = false;    
            while (matcher.find()) {    
                System.out.println("I found the text "+matcher.group()+" starting at index "+    
                 matcher.start()+" and ending at index "+matcher.end());    
                found = true;    
            }    
            if(!found){    
                System.out.println("No match found.");    
            }    
        }    
    }    
} 

Пример:

Enter text:
Radius of Circle is 7 cm
I found the text 7 starting at index 20 and ending at index 21
Enter text:
Rectangle 8 Height is 10 cm
I found the text 8 starting at index 10 and ending at index 11
I found the text 10 starting at index 22 and ending at index 24
Enter text:
Rectangle Width is 100 cm, Some text
I found the text 100 starting at index 19 and ending at index 22
Enter text:

Примечание. В коде java символ \ является escape-символом. Вот почему вы должны добавить еще \.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...