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 に答える