java - 正则表达式提取组中的子字符串

标签 java regex

我想使用正则表达式从以下输入中提取名称。

Student Names:
    Name1
    Name2
    Name3

Parent Names:
    Name1
    Name2
    Name3

我正在使用以下方法来匹配数据,并且我不应该修改该方法。我必须想出适用于这种方法的正则表达式。

public void parseName(String patternRegX){

        Pattern patternDomainStatus = Pattern.compile(patternRegX);
        Matcher matcherName = patternName.matcher(inputString);
        List<String> tmp=new ArrayList<String>();

        while (matcherName.find()){
            if (!matcherName.group(2).isEmpty())
                tmp.add(matcherName.group(2));
        }
}

我想出了一个正则表达式,可以得到想要的结果,但我发现的问题是分组在方括号([])内不起作用。

private String studentRegX="(Student Names:\n[ +(\S+)\n]+\n)";

我现在使用以下正则表达式,但这只能得到每组中的姓氏。

private String studentRegX="Student Names:\\n( +(\\S+)\\n)+\\n";
private String parentRegX="Parent Names:\\n( +(\\S+)\\n)+\\n";

提前感谢您的帮助。

最佳答案

首先,我希望你能稍微改变一下parseName方法,因为它无法编译。 patternDomainStatuspatternName 可能应该引用同一个对象:

    Pattern pattern = Pattern.compile(patternRegX);
    Matcher matcherName = pattern.matcher(inputString);

其次,您需要以不同的方式思考您的正则表达式。

现在,您的正则表达式正在尝试匹配其中包含多个名称的整个 block 。但是 matcherName.find() 找到“输入序列中与模式匹配的下一个子序列”(根据 javadoc)。

所以你想要的是一个匹配单个名称的正则​​表达式。 matcherName.find() 将循环遍历字符串中与该正则表达式匹配的每个部分。

关于java - 正则表达式提取组中的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25937226/

相关文章:

java - 通过 OkHttp 拦截器拦截和重试调用

php - 在 php 中使用正则表达式将每个前导和尾随空格替换为下划线

java - 使用多行正则表达式进行 Html 解析

java - ActiveMQ http 连接错误

java - 销毁方法在spring框架中不起作用

java - 以编程方式在 Eclipse 插件中打开 View

JavaScript RegEx 集团

javascript - 如何在我的react应用程序中嵌入如下所示的代码运行器

C++ 正则表达式 : replace\d\s( with\d*(

javascript - 使用正则表达式在 JavaScript 中出现意外标记 ^