我用 Java 编写了代码,以返回两个字符序列之间的字符串信息。我的代码是:
String caseDefendant = "vs.";
Pattern caseDefendantPattern = Pattern.compile("(?<="+Pattern.quote(caseDefendant)+").*?(?=</span>)");
Matcher caseDefendantMatcher = caseDefendantPattern.matcher(pageContentString);
while (caseDefendantMatcher.find()) {
docketFile.write(caseDefendantMatcher.group().toString());
}
docketFile.write("^");
我想要做的是返回 vs.
之间的信息和</span>
。此问题在于字符串“pageContentString”中的序列 vs.INFORMATION</span>
发生两次,所以当我将其写入文件时,它被写入两次而不是一次,而我只需要写入一次的信息。例如,如果 pageContentString 是:
"vs.info1</span> aaabbbccc vs.info1</span>"
我的文件写为 info1 info1
。我如何更改我的代码,使其不会写入第二组信息?
最佳答案
这里有一个循环:
while (caseDefendantMatcher.find()) {
docketFile.write(caseDefendantMatcher.group().toString());
}
此循环将查找并打印所有匹配项。如果您只想要第一个匹配项,则不要循环:
String caseDefendant = "vs.";
Pattern caseDefendantPattern = Pattern.compile("(?<="+Pattern.quote(caseDefendant)+").*?(?=</span>)");
Matcher caseDefendantMatcher = caseDefendantPattern.matcher(pageContentString);
if (caseDefendantMatcher.find()) {
docketFile.write(caseDefendantMatcher.group().toString());
}
docketFile.write("^");
关于java - 模式和匹配器的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21391660/