Python和Rubular之间正则表达式的差异?
在Rubular中,我创建了一个正则表达式:Python和Rubular之间正则表达式的差异?,python,regex,rubular,Python,Regex,Rubular,在Rubular中,我创建了一个正则表达式: (Prerequisite|Recommended): (\w|-| )* 它与粗体字匹配: 推荐:使用电脑和一些艺术产品时舒适度良好。 夏天。2学分先决条件: 大学新生入学前的地位或 教练。信用证可能不适用 走向工程学位。S-U 只有分数 下面是Python中正则表达式的用法: note_re = re.compile(r'(Prerequisite|Recommended): (\w|-| )*', re.IGNORECASE) def pr
(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()
?您想使用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')
此外,如果要匹配单词“讲师”后面的第一个句点,则必须在模式中添加文字“.”:
>>> 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.')
上一个模式添加了literal“.”,返回的结果与本例中的
*
相同。表示正则表达式即使使用Python引擎也会匹配该字符串,因此问题在于如何使用正则表达式(我不知道Python),我个人会将正则表达式更新为(前提条件推荐):([\w-]*)
这样您就可以更好地捕捉比赛的其余部分。(请参阅)…或者(.*?\)
只匹配第一个句点。