我有一个单词列表,我必须找到单词的最小单词子段,忽略任何特殊的字符和数字, 此子段可以包含任何顺序的单词和不区分大小写的搜索 这个编码将在java中完成
例如。
aaaa aaaa cccc cccc bbbb bbbb bbbb bbbb Bbbb Aaaa Cccc
并且有话语
aaaa
bbbb
cccc
然后它应该给我输出
Bbbb Aaaa Cccc
我知道正则表达式(java中的正则表达式)但是,对它来说是新的,所以任何帮助都会有很大用处。
答案 0 :(得分: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检查捕获组是否包含所有单词。如果他们找到匹配项,如果没有,请搜索下一个匹配项并重复。
你可以把这一切都用regex来解决,但是你必须构造正确的表达式:
(?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
可以是匹配所有允许单词的任何表达式(不必是替换)。