2016-08-19 3 views
0

Я борюсь с регулярным выражением, которое может извлекать значения, подобные метрикам, из операторов. Ниже приведены некоторые примеры, я столкнулся:Извлечение измерений размера с использованием регулярного выражения

Примеров вопросы:

  1. изображений пиксельных 200x500 точек размывания - экстракт 200x500 точек
  2. изображения пиксел 200 х 500 размытости - извлечь 200 х 500
  3. 100.22 х 200.55 х 90,55 мм - размер ручного телефона - экстракт 100,22 x 200,55 x 90,55 мм
  4. Мобильный телефон размером 100.22x200.55x90.55 мм. - экстракт 100.22x200.55x90.55 мм

До сих пор мой код следующим образом

String str_array[] = new String[4]; 
 
\t \t str_array[0] = "Image pixel 200x500 px blur"; 
 
\t \t str_array[1] = "Image pixel 200 x 500 blurring"; 
 
\t \t str_array[2] = "100.22 x 200.55 x 90.55 mm is the size of the handphone"; 
 
\t \t str_array[3] = "The mobile phone is 100.22x200.55x90.55 mm in dimension."; 
 
\t \t for (int i=0;i<str_array.length;i++){ 
 
\t \t \t Pattern pty_resolution_ratio_metrics_try = Pattern.compile("(\\d+)[\\.\\d]+(\\s*)x"); 
 
\t \t \t Matcher matcher_value_metrics_error_try = pty_resolution_ratio_metrics_try.matcher(str_array[i]); 
 
\t \t \t while (matcher_value_metrics_error_try.find()) { 
 
\t \t \t \t System.out.println("index: "+i+"-"+matcher_value_metrics_error_try.group(0)); 
 
\t \t \t } 
 
\t \t }

Результаты вышеуказанных кодов:

  • индекс: 0 -200x
  • индекс: 1-200 x
  • индекс: 2-100.22 х
  • индекс: 2-200.55 х
  • индекс: 3-100.22x
  • индекс: 3-200.55x

Любые регулярные предложения выражения? Нужна помощь по этому поводу.

Спасибо!

+0

Вам не нужно перекомпилировать один и тот же шаблон. Сделайте это статическим финалом. – EJP

ответ

0

Вы можете это регулярное выражение:???

((?:\\d[\\d\\s\\.x]+\\d)(?:\\s*(?:px|mm))?) 

Это регулярное выражение находит все цифры, пробелы, периоды и x внутри 2 цифр. И проверяет на px или mm после цифр.

В качестве альтернативы вы можете использовать регулярное выражение, которое проверяет, чтобы убедиться, что все в правильном порядке (без пробелов между числами):

((?:(?:[\\d\\.]+)(?:\\s*x\\s*(?:[\\d\\.]+))+)(?:\\s*(?:px|mm))?) 
public static void main(String[] args) { 

    String texts[] = {"Image pixel 200x500 px blur", 
     "Image pixel 200 x 500 blurring", 
     "100.22 x 200.55 x 90.55 mm is the size of the handphone", 
     "The mobile phone is 100.22x200.55x90.55 mm in dimension"}; 

    String regex = "((?:\\d[\\d\\s\\.x]+\\d)(?:\\s*(?:px|mm))?)"; 

    Pattern p = Pattern.compile(regex); 

    for (int q = 0; q < texts.length; q++){ 
     Matcher m = p.matcher(texts[q]); 
     while (m.find()){ 
      System.out.println(m.group()); 
     } 
    } 
} 

печатает следующее:

200x500 px 
200 x 500 
100.22 x 200.55 x 90.55 mm 
100.22x200.55x90.55 mm 
+0

Спасибо всем за вашу помощь. Оно работает! –

0
public static void getDimensions(String text) { 
    Pattern pattern = Pattern.compile("((\\d+.?\\d+)(\\s?)x?\\s?)+"); 
    Matcher matcher = pattern.matcher(text); 
    while (matcher.find()) { 
     System.out.println("Index: " + matcher.start()+" Found: " + matcher.group()); 
    } 

} 

Попробуйте один

0

Добавление к тому, что @ngrj добавил, для того, чтобы напечатать аббревиатуры вы можете изменить его ниже:

Pattern.compile ("((\ d +.? ? \ d +) (\ s) р х \ с (мм)) + ")

Смежные вопросы