我試圖將一個文本與詞彙表列表進行匹配。問題是我的模式對於一個文本顯示不同的行爲。 例如這裏是我的文字:匹配器避免以s,ing或中間單詞結尾的單詞
\nfor Sprints \nSprints \nSprinting \nAccount Accounts Accounting\nSprintsSprints
與下列模式匹配,我儘量只找到確切的詞與詞彙相匹配,避免查找單詞,s結尾,荷蘭國際集團,......它只返回我要「帳戶」字正確的答案,但如果我嘗試衝刺,然後返回我的衝刺,短跑等這是不正確的:
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')。 –
這正是我得到的字符串的一部分 – user261002