我有一个单词列表,我必须找到单词的最小单词子段,忽略任何特殊字符和数字,这个子段可以有任何顺序的单词和不区分大小写的搜索,这个编码是在爪哇
例如
aaaa aaaa cccc cccc bbbb bbbb bbbb bbbb Bbbb Aaaa Cccc
并且有话
aaaa
bbbb
cccc
那么它应该给我输出
Bbbb Aaaa Cccc
我知道正则表达式(java中的正则表达式)但是,它是新手,所以任何帮助都会很有用..
我有一个单词列表,我必须找到单词的最小单词子段,忽略任何特殊字符和数字,这个子段可以有任何顺序的单词和不区分大小写的搜索,这个编码是在爪哇
例如
aaaa aaaa cccc cccc bbbb bbbb bbbb bbbb Bbbb Aaaa Cccc
并且有话
aaaa
bbbb
cccc
那么它应该给我输出
Bbbb Aaaa Cccc
我知道正则表达式(java中的正则表达式)但是,它是新手,所以任何帮助都会很有用..
你可以做的是构造一个这样的正则表达式:
(?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
可以是匹配所有允许单词的任何表达式(不必是交替)。