2016-08-19 41 views
0

我正在用正則表達式掙扎,該正則表達式可以從語句中提取類似指標的值。下面是一些示例中,我遇到過:使用正則表達式提取尺寸度量值

樣題:

  1. 圖像像素200×500像素模糊 - 提取200×500像素
  2. 圖像像素200×500的模糊 - 提取200×500
  3. 100.22 X 200.55 X 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
  • index:1-200 x
  • 指數:2-100.22 X
  • 指數:2-200.55 X
  • 指數:3-100.22x
  • 指數:3-200.55x

任何正則表達式的建議?需要幫助。

謝謝!

+0

您不需要重新編譯相同的模式。做一個靜態的決賽。 – EJP

回答

0

您可以此正則表達式:????

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

這個正則表達式查找所有數字,空格,句點和x的2個數字。然後檢查數字後面的pxmm

或者你可以用它進行檢查,以一個正則表達式確保一切都在正確的順序(數字之間沒有空格):

((?:(?:[\\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)p X \ S(毫米))+「)