Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python和Rubular之间正则表达式的差异?_Python_Regex_Rubular - Fatal编程技术网

Python和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

在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()

您想使用
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-]*)
这样您就可以更好地捕捉比赛的其余部分。(请参阅)…或者
(.*?\)
只匹配第一个句点。