我想读一个字的HTML文件,并抓住其中包含名称的字母而不是打印出来的任何话,如果的话比正则表达式的问题(蟒蛇)
# compiling the regular expression:
keyword = re.compile(r"^[(rR)|(yY)|(aA)|(nN)]{5}$/")
if keyword.search (line):
print line,
我正在抢夺名称较长这个词,但似乎没有适当限制的大小。
我想读一个字的HTML文件,并抓住其中包含名称的字母而不是打印出来的任何话,如果的话比正则表达式的问题(蟒蛇)
# compiling the regular expression:
keyword = re.compile(r"^[(rR)|(yY)|(aA)|(nN)]{5}$/")
if keyword.search (line):
print line,
我正在抢夺名称较长这个词,但似乎没有适当限制的大小。
它似乎你正在寻找keyword.match()
,而不是keyword.search()
。您应该阅读this part of the python documentation,其中讨论了匹配和搜索之间的区别。
此外,您的正则表达式似乎完全关闭... [
和]
划定了一组字符,因此您不能放置组并在组周围设置逻辑。如书面表达,您的表达也将匹配所有(
,)
和|
。你可以尝试以下方法:
keyword = re.compile(r"^[rRyYaAnN]{5}$")
你的RE "^[(rR)|(yY)|(aA)|(nN)]{5}$/"
会永远永远永远给在地球上的任何字符串匹配和其他地方,我想是因为'/'
字符后'$'
见的结果, 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所述,在括号[......]
之间,很多特殊字符失去了它们的特性。因此'('
,')'
,'|'
不要定义组,或者,他们仅仅代表这些字符作为一些选择用字母'aArRyYnN'
一起。
"^[rRyYaAnN]{1,5}$"
只会匹配字符串作为“R”,AR”,‘YNA’,‘YYnA’,‘保姆’
如果你想在文本的任何地方匹配相同的话,您将需要"[rRyYaAnN]{1,5}"