1

我有一个单词列表,我必须找到单词的最小单词子段,忽略任何特殊字符和数字,这个子段可以有任何顺序的单词和不区分大小写的搜索,这个编码是在爪哇

例如

aaaa aaaa cccc cccc bbbb bbbb bbbb bbbb Bbbb Aaaa Cccc

并且有话

aaaa
bbbb
cccc

那么它应该给我输出

Bbbb Aaaa Cccc

我知道正则表达式(java中的正则表达式)但是,它是新手,所以任何帮助都会很有用..

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 回答