2016-08-19 144 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(毫米))+“)