Java Regex:匹配第一行中带星号的行

时间:2014-03-30 22:21:07

标签: regex

样本数据

  A       B   C                                           
BHD                                                     
     

P 1 QPH 1 P
  P 2 * PH 2 P
  P 3 * PH ZP ZP 3 P
  P 4 QPH QPH QP 4 P
    5 * H * H * 5
    6 * H * H * 6
    7 * H * H * 7
    8 Z H Z H Z 8
    9 * H * H * 9
   10 * H * H * 10
  W11 * UH * UH * U 11W

我正在尝试在其中提取带有“* H”的第一行(例如第5行),但没有得到任何结果 这是我到目前为止所尝试的

String result = sample Data
Pattern l =Pattern.compile(^  ([A-Z}|//s)? ?([0-9]{1,2})     (\\*)  [H] .*)
Matcher m =l.matcher(result);
If(m.find()){
 System.out.println( “The Row number is: “ m.group(2));
}

1 个答案:

答案 0 :(得分:0)

根据我的理解,您希望逐行扫描String并找到包含* H的第一行,然后返回其编号。

此模式为\\*\\s+H,您只需找到包含该模式的行:

public static int findStartH(final String input) {
    final Pattern pattern = Pattern.compile("\\*\\s+H");
    final Scanner scanner = new Scanner(input);
    for (int i = 1; scanner.hasNextLine(); ++i) {
        final String line = scanner.nextLine();
        if (pattern.matcher(line).find()) {
            return i;
        }
    }
    throw new IllegalArgumentException("Input does not contain required string.");
}

快速测试案例:

public static void main(final String[] args) throws Exception {
    final String input = "Sample Data A B C\n"
            + "BHD\n"
            + "P 1 QPH 1 P\n"
            + "P 2 *PH 2 P\n"
            + "P 3 *PH ZP ZP 3 P\n"
            + "P 4 QPH QPH QP 4 P\n"
            + "5 * H * H * 5\n"
            + "6 * H * H * 6\n"
            + "7 * H * H * 7\n"
            + "8 Z H Z H Z 8\n"
            + "9 * H * H * 9\n"
            + "10 * H * H * 10\n"
            + "W11 *UH *UH *U 11W";
    System.out.println(findStarH(input));
}

输出:

7