首页 > 解决方案 > 使用正则表达式我怎样才能得到括号内的数字?

问题描述

举个例子,假设我在一个名字中搜索一组特定的数字

[3363]Burn the Witch Year 1958

在这种情况下,有 2 组相同长度的数字,我需要得到括号内的数字。如何搜索一组特定长度的数字,它们在括号内而不在答案中得到括号?

regexChecker("\\[\\d{3,4}\\]",longString);

示例代码的输出是[3347].

我用作练习的代码是:

public class PracticaPatrones {
    public static void main(String[] args) {
        String longString = "";

        String[] Names = {"[3358]Maoujou de Oyasumi 1", "[3347]King's Raid; Ishi wo Tsugumono-tachi 2", "[3363]Burn the Witch 3", "[3283]Hachi-nan tte, Sore wa Nai deshou! 1", "[391]Denpa Onna to Seishun Otoko 1", "[0587] Onii-chan Dakedo Ai Sae Areba Kankeinai yo ne 11", "[870] Onii-chan Dakedo Ai Sae Areba Kankeinai yo ne 11"};

        System.out.println(Names.length);
        System.out.println("Bandera");

        for (int i = 0; i < Names.length; i++) {
            longString = Names[i];

            regexChecker("\\[\\d{3,4}\\]", longString);
        }
    }

    public static void regexChecker(String theRegex, String str2Check) {
        Pattern checkRegex = Pattern.compile(theRegex);
        Matcher regexMatcher = checkRegex.matcher(str2Check);

        while (regexMatcher.find()) {
            if (regexMatcher.group().length() != 0) {
                System.out.println(regexMatcher.group().trim());
            }

            System.out.println("start index : " + regexMatcher.start());
            System.out.println("end index : " + regexMatcher.end());
        }
    }
}

标签: javaregex

解决方案


可以使用正则表达式,(?<=\[)\d{3,4}(?=\])可以解释如下:

  1. (?<=\[) 在后面寻找[
  2. \d{3,4}寻找 3 到 4 位数字(它已经存在于您的问题中)
  3. (?=\])展望未来]

演示:

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

public class Main {
    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("(?<=\\[)\\d{3,4}(?=\\])");
        Matcher matcher = pattern.matcher("[3358]Maoujou de Oyasumi 1");
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
    }
}

输出:

3358

推荐阅读