从未知长度的字符串中提取模式

时间:2014-11-10 15:05:52

标签: java regex pattern-matching

我仍然处于Java的萌芽阶段,我正试图找出如何提取所有特定值。

这是以长度未知的字符串形式(模式)[A-H][1-8] 例如,如果我的字符串是" F5 F4 E3 ",我想将F5分配给变量,将F4分配给变量,将E3分配给另一个变量。

或者,如果我的字符串为" A2 ",我想将A2分配给变量 我有种感觉,我应该用Array来存储价值 请注意,在所需图案之间有空格"blankE2blank"

到目前为止,这是我的代码:

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

public class List {
    public static void main(String[] args) {

        int i = 0;
        char[] Wanted = new char[]{?}; // What should I use here?
        Pattern pat = Pattern.compile("\\s*d+\\s*D+\\s*d+");
        String Motherstring = " F5 F4 E3 "; // this is just an example but the extraction should work for every string
        Matcher m = pat.matcher(Motherstring);
        while (pat.find()) {
            Wanted[i] = pat; // ?
            i++;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

不要使用数组。使用List。大小是动态的,允许您add个对象。见:

Pattern pattern = Pattern.compile("[A-H][1-8]");
Matcher matcher = pattern.matcher(" F5 F4 E3 ");

// Create a new list (ArrayList) to store Strings.
ArrayList<String> list = new ArrayList<>();

// For every match of the regexp in the test string:
while (matcher.find())
    // Add the match to the list.
    list.add(matcher.group());

System.out.println(list);

这是online code demo。 STDOUT打印:

[F5, F4, E3]

答案 1 :(得分:0)

您可以使用\b锚点。下面是手写的例子,我还没有测试过。它只是表明了这个想法。

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

public class List {
    public static void main(String[] args) {

        int i = 0;
        char[] Wanted = new char[3];// Instead of array any dynamic collection should be used here. Since I'm not familiar with Java collections enough, Im leaving array here for correct work
        Pattern pat = Pattern.compile("\\b\\w+\\b");
        String Motherstring = " F5 F4 E3 ";
        Matcher m = pat.matcher(Motherstring);
        while (pat.find()) {
            Wanted[i]= pat.group();
            i++;
        }
    }
}