正则表达式:小写字母使用'a'到'e'的4个字母单词

时间:2014-10-22 17:49:40

标签: python regex

我可以设法使用此^[a-z]{4}$从a-z获取四个字母的单词但是我不知道如何得到它所以这个单词中有a和e。我试过这个,但它最终只能通过ae获得世界。 ^[a-z]{2}[a][e]$

import re
import sys
import time

pattern = '^[a-z]{4}$[a][e]' 

#c = ^[^a][a]{2}

regexp = re.compile(pattern)

inFile = open('words.txt','r')
outFile = open('exercise04.log','w')


for line in inFile:
    match = regexp.search(line)
    if match:
        time.sleep(0.1)
        print(line)
        outFile.write(line)

inFile.close()
outFile.close()

^[a-z]{2}[a][e]$

的输出示例
alae

blae

brae

frae

spae

thae

twae

我正在寻找随机词,例如

akes
aejs
soae
skea
esao 

3 个答案:

答案 0 :(得分:5)

您需要使用前瞻来检查包含ae

的行
^(?=.*?a)(?=.*?e)[a-z]{4}$

DEMO

<强>解释

  • ^开始一行。
  • (?=.*?a)正向前瞻断言,该特定行中必须有一个字母a
  • (?=.*?e)正向前瞻断言在该特定行中必须有一个字母e。 Lookarounds通常不匹配任何字符,但它只断言匹配是否可能。
  • [a-z]{4}正好是四个小写字母。
  • $行锚点结束。

答案 1 :(得分:1)

如果问题是:&#34;查找正好四个字母的单词,其中至少有一个a和至少一个e,按任意顺序排列&#34;,一个(比regexp更快,可能)这样做的方法就是提出这三个问题。

我的Python,嗯,几乎不存在,但是:

if 4 == word.length and "a" in word and "e" in word:

似乎比正则表达式更难理解。

答案 2 :(得分:0)

原始正则表达式的一些问题&#39; [a-z] {4} $ [a] [e]&#39;

  1. [a-z]字符集后面有一个4的量词,表示它将匹配4个字符,并且您尝试匹配2个字符。
  2. &#39; $&#39;在您想要匹配的其他字符之前,以及&#39; $&#39;在正则表达式中表示行的结尾。
  3. 如果你只想在最后匹配ae,你只需使用[a-z]{2}ae进行字符串 - 文字匹配。

    我通常使用单词边界而不是^和$作为行的开头和结尾,因为单词可能在其前面有空格。将其与积极前瞻相结合,以便&#39; ae&#39;

    \b(?=.*?ae)[a-z]{4}\b