【发布时间】:2014-04-30 10:14:59
【问题描述】:
我正在尝试将文本与词汇表进行匹配。问题是我的模式对一个文本显示了不同的行为。 例如,这是我的文字:
\nfor Sprints \nSprints \nSprinting \nAccount Accounts Accounting\nSprintsSprints
使用以下模式匹配器,我尝试仅查找与词汇表匹配的确切单词,并避免查找以 s,ing,... 结尾的单词,它只会返回“Account”单词的正确答案,但如果我尝试 Sprint,然后它返回给我 Sprint、Sprinting 等,这是不对的:
Pattern findTerm = Pattern.compile("(" + item.getTerm() + ")(\\W)",Pattern.DOTALL);
这是我的代码:
private static String findGlossaryTerms(String response, List<Glossary> glossary) {
StringBuilder builder = new StringBuilder();
for (int offset = 0; offset < response.length(); offset++) {
boolean match = false;
if (response.startsWith("<", offset)) {
String newString = response.substring(offset);
Pattern findHtmlTag = Pattern.compile("\\<.*?\\>");
Matcher matcher = findHtmlTag.matcher(newString);
if (matcher.find()) {
String htmlTag = matcher.group(0);
builder.append(htmlTag);
offset += htmlTag.length() - 1;
match = true;
}
}
for (Glossary item : glossary) {
if (response.startsWith(item.getTerm(), offset)) {
String textFromOffset = response.substring(offset - 1);
Pattern findTerm = Pattern.compile("(" + item.getTerm() + ")(\\W)",Pattern.DOTALL);
Matcher matcher = findTerm.matcher(textFromOffset);
if (matcher.find()) {
builder.append("<span class=\"term\">").append(item.getTerm()).append("</span>");
offset += item.getTerm().length() - 1;
match = true;
break;
}
}
if (!match)
builder.append(response.charAt(offset));
}
return builder.toString();
}
【问题讨论】:
-
你能举个真实的例子吗?我只能说,如果你想匹配精确的单词,使用锚点(
^$)或边界(\b)。 -
这正是我得到的字符串的一部分