我想使用正则表达式从以下输入中提取名称。
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
方法,因为它无法编译。 patternDomainStatus
和 patternName
可能应该引用同一个对象:
Pattern pattern = Pattern.compile(patternRegX);
Matcher matcherName = pattern.matcher(inputString);
其次,您需要以不同的方式思考您的正则表达式。
现在,您的正则表达式正在尝试匹配其中包含多个名称的整个 block 。但是 matcherName.find()
找到“输入序列中与模式匹配的下一个子序列”(根据 javadoc)。
所以你想要的是一个匹配单个名称的正则表达式。 matcherName.find()
将循环遍历字符串中与该正则表达式匹配的每个部分。
关于java - 正则表达式提取组中的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25937226/