在Rubular中,我创建了一个正则表达式:
(Prerequisite|Recommended): (\w|-| )*它与粗体相匹配:
推荐:电脑和一些艺术的良好舒适感。
夏天。2学分。必备条件:大一新生起立或获得讲师许可.学分不适用于工程学位. S-U级仅适用.
下面是Python中regex的用法:
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()吗?
发布于 2010-05-09 23:18:11
您希望使用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.')前面的模式加上文字'.',在这个示例中返回与.*相同的内容。
https://stackoverflow.com/questions/2799418
复制相似问题