正则表达式:匹配仅包含某些字母的单词

时间:2019-10-01 21:34:29

标签: regex

我正在使用位于here的正则表达式字典,想要查找仅包含以下字母的单词:B, C, D, E, H, I, K, O.例如,cod, hoe, and hob.

我认为,执行此操作的简单方法是使用以下正则表达式查询:[bcdehiko]+,但这会产生许多单词,这些单词至少包含一个带括号的字母实例以及任何其他字母。

3 个答案:

答案 0 :(得分:1)

由于您尚未指定语言(我认为其他人在寻找这种答案时可能会觉得有用),因此这是中您的问题的答案,而无需使用正则表达式。

l = 'bcdehiko'
d = ['cod', 'codz']

for w in d:
    print(all(x in l for x in w))

此方法遍历字典 * d,并确保该单词中的所有字符都存在于字符串l中。看到它运作here

OP最初提出的问题中的

*字典是指单词本意义上的字典,而不是计算意义上的字典。
在脚本中,变量d是一个列表。


或者,如果您要确保一个单词包含字符列表中的至少一个字符,则可以在上述脚本中将any替换为all(可以通过添加单词来进行测试ran到列表d-在列表d中不包含单个字母)。看到它运作here

答案 1 :(得分:1)

对于该网站,最简单的解决方案是将启动的正则表达式与行首和行尾匹配相结合。这样可以确保单词只包含所需的字符。这是您要用来获得结果的正则表达式:

^[bcdehiko]+$

如果您对-的语言表示满意,也可以使用它:

^[bcdehiko]+(-[bcdehiko]+)*$

为了第二个正则表达式的改进而致谢@ctwheels。

答案 2 :(得分:0)

您正在使用此正则表达式:

[bcdehiko]+

这意味着匹配方括号中给定字符的一个或多个实例。

但是,由于没有使用单词边界,因此此正则表达式还允许匹配单词中的其他字符。

您可能希望在正则表达式的两边都用\b进行包装,以确保不允许使用其他字符:

\b[bcdehiko]+\b