2013-05-14 96 views
5

有没有简单的方法来忽略/遗漏某些字母。问题是找到一个长度为5个字母但不包含字母b,j,m或n的单词。正则表达式丢失了某些字母

我可以只指定我想要的字母,例如[a] [c-i] [k-1] [o-2]吗?这看起来不是很干净,我仍然需要指定单词需要5个字母。所以我想我需要一个/ w和一个{5},但不知道如何组合它。 谢谢。

回答

10

这将选择所有字符,除了bjmn:

[^bjmn]{5} 

如果你想只小写字母除了那些你列出:

[c-ik-lo-za]{5} 

如果你不想5个字母词那是长字的一部分,加字边界检查:

\b[c-ik-lo-za]{5}\b 
+2

OP希望除了'bjmn',没有任何从我的理解只有字符'letters'。 – Dogbert 2013-05-14 14:10:18

+0

OP也只想要5个字母的单词,这个单词也会与'baduouwwen'中的'aduou'相匹配 – 2013-05-14 15:58:23

0

而不是[a][c-i][k-l][o-2],请尝试[ac-ik-lo-z]{5},它应该检测五个允许字母的字符串。

编辑:哎呀,你特别想要单词。只需测试任意一边的单词边界,然后:\b[ac-ik-lo-z]{5}\b - 检查空格会使您错过匹配,如果它是最后一行,并且后面有一段时间,后面有一个逗号,括号内是,等等。

+0

正如davide所提到的,如果您关心区分大小写,您可能要明确地允许或拒绝大写版本,或者只是使用一个标志来使正则表达式不区分大小写。 – Mike 2013-05-14 14:11:40

0

如果您也不想使用大写字母,请使用[^ bjmn]或[^ BbJjMmNn]。

+2

OP只想要除了bjmn之外的字母,而不是任何我理解的字符。 – Dogbert 2013-05-14 14:11:04

0

尝试\W[ac-ik-lo-z]{5}\W(这在一组五个字符的两侧不包含你正在寻找的那些匹配的空白。

您可以将多个范围合并为一个列表,如上。

+0

交换\ W for \ b来测试一般的单词边界。例如,如果该单词是最后一行,并且有一段时间,或者逗号,该怎么办? – Mike 2013-05-14 14:17:52

0

这需要一个词有5个字母,但不包括任何bjmn的。这可以通过使用字母简化跨越像[AC-I],但这些往往会得到尝试读取时有点混乱。

\b([acdefghiklopqrstuvwxyz]{5})\b

enter image description here

enter image description here