我想阅读一个单词html文件,并抓住任何包含姓名字母的单词,但如果单词长于名称则不打印它们
# compiling the regular expression:
keyword = re.compile(r"^[(rR)|(yY)|(aA)|(nN)]{5}$/")
if keyword.search (line):
print line,
我正在抓住这个词,但似乎没有正确限制大小。
答案 0 :(得分:3)
您似乎在寻找keyword.match()
而不是keyword.search()
。你应该阅读this part of the python documentation,其中讨论了匹配和搜索之间的区别。
此外,您的正则表达式似乎完全关闭... [
和]
分隔一组字符,因此您无法放置组并在组周围拥有逻辑。如上所述,您的表达式也会匹配所有(
,)
和|
。您可以尝试以下方法:
keyword = re.compile(r"^[rRyYaAnN]{5}$")
答案 1 :(得分:1)
我认为,由于"^[(rR)|(yY)|(aA)|(nN)]{5}$/"
'/'
字符,您的RE '$'
永远不会永远不会在地球和其他地方的任何字符串中进行匹配
请参阅没有此'/'
的RE的结果:
import re
pat = re.compile("^[(rR)|(yY)|(aA)|(nN)]{5}$")
for ch in ('arrrN','Aar)N','()|Ny','NNNNN',
'marrrN','12Aar)NUUU','NNNNN!'):
print ch.ljust(15),pat.search(ch)
结果
arrrN <_sre.SRE_Match object at 0x011C8EC8>
Aar)N <_sre.SRE_Match object at 0x011C8EC8>
()|Ny <_sre.SRE_Match object at 0x011C8EC8>
NNNNN <_sre.SRE_Match object at 0x011C8EC8>
marrrN None
12Aar)NUUU None
NNNNN! None
我的建议:将RE中的[.....]
视为在一个位置代表一个角色。因此,括号之间的每个字符都是表示字符的选项之一。
此外,正如Adrien Plisson所说,在方括号[......]
之间,许多特殊人物失去了他们的专长。因此,'('
,')'
,'|'
不定义组和OR,它们仅将这些字符表示为一些选项以及字母'aArRyYnN'
"^[rRyYaAnN]{1,5}$"
只匹配字符串'r',ar','YNa','YYnA','Nanny'
如果您想在文字的任何位置匹配相同的字词,则需要"[rRyYaAnN]{1,5}"