Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scrabble Python正则表达式匹配_Python_Regex_String_Dictionary - Fatal编程技术网

Scrabble Python正则表达式匹配

Scrabble Python正则表达式匹配,python,regex,string,dictionary,Python,Regex,String,Dictionary,我正在尝试创建一个简单的拼字解算程序,它可以创建Python单词语料库词典中所有3个字母单词的列表。我已经阅读了python中搜索正则表达式的相关书籍,但是还没有找到解决问题的方法 我是python的初学者,所以这可能是一个非常简单的修复或程序,但任何帮助都将不胜感激 这是我的表达式,它的意思是返回字典中仅包含元音的每3个字母的单词,但是它当前返回字典中包含元音的每个单词!我有一种感觉,这可能与我的元字符有关,但我不确定 vowels = [w for w in words if re.sear

我正在尝试创建一个简单的拼字解算程序,它可以创建Python单词语料库词典中所有3个字母单词的列表。我已经阅读了python中搜索正则表达式的相关书籍,但是还没有找到解决问题的方法

我是python的初学者,所以这可能是一个非常简单的修复或程序,但任何帮助都将不胜感激

这是我的表达式,它的意思是返回字典中仅包含元音的每3个字母的单词,但是它当前返回字典中包含元音的每个单词!我有一种感觉,这可能与我的元字符有关,但我不确定

vowels = [w for w in words if re.search('aeiou$', w)]

要存储仅由元音组成的所有3个字母单词,请执行以下操作:

import re

words = ['asd', 'aei', 'a']
result = [w for w in words if re.match(r'[aeiou]{3}$', w)]

print(result)
[asd]
将匹配
'a'
's'
'd'
<代码>{3}正好匹配其中的3个。匹配字符串的开头


或者,如果要避免使用正则表达式,请执行以下操作:

results = []
for w in words:
    if len(w) == 3:

        for letter in w:
            if letter not in 'aeiou':
                break
        else:
            results.append(w)

如果找到一个非元音字母,的
将断开,其
否则:
未到达,因此不会存储该单词。

我将使用锚,添加也可以是元音的
y
字母,以及
[aeiouy]
字符类:

   result = [w for w in words if re.match(r'^[aeiouy]{3}$', w)]
如果“y”产生不需要的结果,可以从字符类中删除
y
字母

   result = [w for w in words if re.match(r'^[aeiou]{3}$', w)]

“它目前正在返回字典中包含元音的每个单词”-不,regex将只匹配字面上以
'aeiou'
结尾的单词。“每3个字母的单词只包含元音”将是
r'^[aeiou]{3}$'
。你应该试着读一本正则表达式教程。@jonrsharp我的错误,我应该漏掉$metacharacter。你能给我提供一些关于如何获得我想要的输出的指导吗?谢谢你的帮助,你的正则表达式产生了我想要的精确输出。作为旁注,是否可以轻松地编辑为regex,现在可以说匹配所有最长为3个字符的单词?我尝试在4之前简单地添加a<,但是没有效果。再次感谢您的支持help@freshwaterjoe对要做到这一点,只需将
{3}
更改为
{4}
。在我提供的链接中,您可以向上滚动并阅读更多关于模式中使用的符号及其含义的信息。Offtopic:如果您编辑您的问题并更改@john提到的不准确的部分,那就太好了。