0

我有在冗长的字符串中查找单词的函数。

如果变量“v”包含之间的字符串,则该行匹配<vocab></vocab>

if(p.matches("\\W"+v+"\\W"))

我希望这一行应该匹配 v 是 \n 或 \t 或空格之间的完整单词,并且不包含在另一个单词中。

这是我的字符串:

<meta>
<vocab>called</vocab>
</meta>
<para>
called to-VP,Reid-NP,television cameras-NP
called to-VP,Reid-NP,one of-NP
one of-VP,Reid-NP,ornate rooms-NP
called to-VP,Reid-NP,Capitol-NP
called to-VP,Reid-NP,ceremony-NP
passed on-VP,last week-NP,spending bill-NP
passed on-VP,last week-NP,House-NP
passed on-VP,last week-NP,Senate-NP
officially complete-VP,ceremony-VP/NP,action-NP
called to-VP,television cameras-NP,one-NP
called in-VP,television cameras-NP,Capitol-NP
called for-VP,television cameras-NP,ceremony-NP
called-VP,Reid-NP,television cameras-NP
age-NP,last week-NP,event-num
</para>
4

2 回答 2

0

正确的正则表达式是:

if (p.matches("(?s).*\\b" + v + "\\b.*"))

这里有一些重要的点:

  • (?s)表示“点匹配换行符”,因此它适用于多行输入
  • 使用正则表达式\b,这是一个“单词边界”
  • String.matches()必须匹配整个字符串才能返回 true,因此.*在任一端都匹配整个字符串
于 2013-07-23T10:39:28.097 回答
0

我建议使用Pattern.quote(regex)你的变量v,因为它可以包含一些正则表达式元字符。还要确保您匹配完整的单词使用单词边界。所以你的模式看起来像:

Pattern p = Pattern.compile("\\b" + Pattern.quote(v) + "\\b");
于 2013-07-23T10:12:55.287 回答