我已经盯着这个问题好几个小时了,我不知道该用什么正则表达式格式来解决这个问题。
问题:
给定以下输入字符串,找到所有可能的输出单词5个字符或更长。
您的程序应该找到可以从提供的字符串中派生的所有可能的单词(5个以上的字符)。使用http://norvig.com/ngrams/enable1.txt作为搜索词典。输出单词的顺序无关紧要。
关于输入字符串的假设:
尝试的解决方案:
首先,我从该网页下载了单词,并将它们存储在计算机中的文件中(“ words.txt”):
import requests
res = requests.get('http://norvig.com/ngrams/enable1.txt')
res.raise_for_status()
fp = open('words.txt', 'wb')
for chunk in res.iter_content(100000):
fp.write(chunk)
fp.close()
然后,我试图使用正则表达式匹配我需要的单词。问题是我不知道如何格式化我re.compile()
来实现这一目标。
import re
input = 'qwertyuytresdftyuioknn' #example
fp= open('words.txt')
string = fp.read()
regex = re.compile(input[0]+'\w{3,}'+input[-1]) #wrong need help here
regex.findall(string)
显而易见,这是错误的,因为我需要匹配输入字符串中从左到右的字母,而不是我误用的任何字母\w{3,}
。任何帮助,将不胜感激。
这感觉有点像作业问题。因此,我不会给出完整的答案,但会尝试给出一些提示:方括号之间给出的要匹配的字符组[adfg]
将与字母a,d,f或g匹配。[adfg]{3,}
将与至少三个字母匹配的任何部分。查看您的单词列表,您只想匹配整行。如果将re.MULTILINE
用作第二个参数re.compile
,^
则将匹配行的开头和$
结尾。
添加:
如果字符只能出现在给定的顺序,并假设每个字符可以出现任意次数:'qw*e*r*t*y*u*y*t*r*e*s*d*f*t*y*u*i*o*k*n*n'
。但是,我们总共也必须至少有5个字符。(?<=\w{5})
最后添加肯定的后置断言可以确保这一点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句