我想讀一個字的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}"