java - 模式和匹配器的问题

标签 java regex

我用 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/

相关文章:

java - 无法在 TextView 中获得双输出

javascript - 如果检测到空格,如何对字符串进行切片?

javascript - 使用重复模式捕获正则表达式

javascript - 正则表达式意外字符

r - 计算小数点和第一个非零数字之间的前导零

java - 如何在java中使用poi自动调整行高?

java - 为什么在我们具有与方法参数相同的泛型列表的以下两个方法调用中存在差异?

java - 包命名约定

java - Java中可变参数方法的性能

PHP 复杂的字符串解析