2010-05-09 110 views
1

在Rubular,我創建了一個正則表達式:Python和Rubular之間的正則表達式的區別?

推薦:良好的舒適性水平的計算機和一些藝術

(Prerequisite|Recommended): (\w|-|)* 

它粗體顯示的一致。

夏天。 2學分。 先決條件: 預大一新生或 指導老師的許可。信用可能不適用於工程學位 。僅限S-U 等級。

這裏是Python中使用正則表達式的:

note_re = re.compile(r'(Prerequisite|Recommended): (\w|-|)*', re.IGNORECASE) 

def prereqs_of_note(note): 
    match = note_re.match(note) 
    if not match: 
     return None 
    return match.group(0) 

不幸的是,代碼返回None,而不是一場比賽:

>>> import prereqs 

>>> result = prereqs.prereqs_of_note("Summer. 2 credits. Prerequisite: pre-fres 
hman standing or permission of instructor. Credit may not be applied toward engi 
neering degree. S-U grades only.") 

>>> print result 
None 

什麼我錯在這裏做什麼?

更新:我需要re.search()而不是re.match()嗎?

+2

http://pythex.org/說,即使使用Python的引擎,正則表達式匹配該字符串,所以問題是你如何使用正則表達式(我不知道Python) – Gareth 2010-05-09 22:32:59

+1

此外,個人我會將你的正則表達式更新爲'(先決條件|推薦):([\ w - ] *)',這樣你可以更好地捕獲剩餘的比賽。 (見http://rubular.com/r/5v7u66vc1M) – Gareth 2010-05-09 22:35:26

回答

2

您想使用re.search(),因爲它掃描字符串。您不需要re.match(),因爲它試圖在字符串的開頭應用該模式。

>>> import re 
>>> s = """Summer. 2 credits. Prerequisite: pre-freshman standing or permission of instructor. Credit may not be applied toward engineering degree. S-U grades only.""" 
>>> note_re = re.compile(r'(Prerequisite|Recommended): ([\w -]*)', re.IGNORECASE) 
>>> note_re.search(s).groups() 
('Prerequisite', 'pre-freshman standing or permission of instructor') 

此外,如果您想要匹配「instructor」之後的第一個句點,則必須添加一個文字'。'。到你的模式:

>>> re.search(r'(Prerequisite|Recommended): ([\w -\.]*)', s, re.IGNORECASE).groups() 
('Prerequisite', 'pre-freshman standing or permission of instructor. Credit may not be applied toward engineering degree. S-U grades only.') 

我建議你讓你的模式貪婪和匹配上線的其餘部分,除非那不是你真正想要的東西,雖然它看起來像你一樣。

>>> re.search(r'(Prerequisite|Recommended): (.*)', s, re.IGNORECASE).groups() 
('Prerequisite', 'pre-freshman standing or permission of instructor. Credit may not be applied toward engineering degree. S-U grades only.') 

先前圖案與另外的文字「」,返回相同.*這個例子。

+1

......或者可能是'(。*?\。)'僅匹配到第一個時間段。 – 2010-05-10 08:38:54

相關問題