1

単語のリストがあり、特殊文字や数字を無視して、単語の最小の単語サブセグメントを見つける必要があります。このサブセグメントには、任意の順序で大文字と小文字を区別しない検索を行うことができます。このコーディングは、 java

例えば

aaaa aaaa cccc cccc bbbb bbbb bbbb bbbb Bbbb Aaaa Cccc

と言葉を持っています

aaaa
bbbb
cccc

その後、それは私に次のように出力を与えるはずです

Bbbb Aaaa Cccc

私は正規表現(Javaではregex)について知っていますが、これは初めてなので、どんな助けでも大いに役立ちます。

4

1 に答える 1

4

あなたができることは、次のような正規表現を作成することです。

(?i)\b(aaaa|bbbb|cccc)(?=\W+(\w+)\W+(\w+)\b)
\__/  \_____________/    \______/         \__ makes sure it's a complete word
 |           |               \____ repeat N-1 times (N = number of words)
 |           \___ all words alternated to match the first word
 \__ case insensitive matching

次に、Javaを使用して、キャプチャグループにすべての単語が含まれていることを確認します。一致するものが見つかった場合は、一致しなかった場合は、次の一致を検索して繰り返します。


これは正規表現だけで解決することができますが、適切な式を作成する必要があります。

(?i)\b(words)\W+(?!\1\b)(words)\W+(?!(?:\1|\2)\b)(words)\b
       \___/ \________________/   \_____________/
         |           |                  |
  list of all the    |         lookahead has to include
  words alternated   |         all previous capturing groups
                     |
             repeat N-1 times but you have to 
             change the lookahead each time

これは多くの単語にとってかなり大きな表現になりますが、words許可されているすべての単語に一致する任意の表現にすることもできます(交互である必要はありません)。

于 2012-06-21T13:45:43.633 に答える