如何从原始文本中提取模式编号

时间:2017-11-08 05:25:59

标签: android regex

我的文字类似300..—1234 5678 9012.—..0000-040.

我如何只提取数字123456789012

我想获得的数字只有数字+空格+数字+空格+数字

这是我在获得1234 5678 9012后尝试过的。希望您理解我的问题。提前谢谢

String text = item.getValue().trim();
char[] charArray = text.toCharArray();
String f1 = String.valueOf(charArray[4]);
String f2 = String.valueOf(charArray[9]);
if (item.getValue().length() == 14) {
   if (f1.equals(" ") && f2.equals(" ")) {
       String input = text.replace(" ", "");
       if (input.matches("[0-9]+") && input.length() == 12) {
          Log.i(TAG,input);
          }
       }
     }

2 个答案:

答案 0 :(得分:2)

对你:

 String text="300..—1234 5678 9012.—..0000-040";
 Pattern p = Pattern.compile("[0-9]+\\s[0-9]+\\s[0-9]+");
 Matcher m=p.matcher(text);
 if(m.find()) {
     System.out.println(m.group(0).replaceAll(" ",""));
 }      

答案 1 :(得分:0)

对于给定的输入,下面应提取数字+空格+数字+空格+数字,但您需要通过针对所有可能的数据点进行测试来改进它。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Regex {
    public static void main(String[] args) {
        String data = "300..—1234 5678 9012.—..0000-040.";
        Pattern pattern = Pattern.compile("[^0-9].([0-9 ]+)[^0-9].");
        Matcher matcher = pattern.matcher(data);
        if (matcher.find()) {
            // use replace(" ", "") only if you want to remove spaces
            // from the resultant string numbers+spaces+numbers+spaces+numbers
            System.out.println(matcher.group(1).replace(" ", ""));
        }
    }
}