什么是正确的正则表达式?

时间:2013-12-04 20:45:50

标签: python regex

我想在Sistemas Operativos中抓住No aprobó ni está inscripto a Sistemas Operativos (Ord. 1150)(Ord. 1150)是可选的。它可以出现,也可以不出现。

Mi首先尝试的是: No aprobó ni está inscripto a (.*)( \(Ord\. 1150\))?但此返回(u'Sistemas Operativos (Ord. 1150)', None)

那么,什么是正确的正则表达式?

我在Python中使用re。

更新:我不需要特别捕捉字符串'Sistemas Operativos',该字符串只是一个例子。可以有任何其他字符串,但上下文(No aprobó ni está inscripto a .* (Ord.1150))将始终相同。请在此处查看@DSM的评论。

2 个答案:

答案 0 :(得分:2)

尝试

No aprobó ni está inscripto a ([^()]*)( \(Ord\. 1150\))?

Regular expression visualization

Debuggex Demo

然后你只需要这样做:

import re
myString = "No aprobó ni está inscripto a Sistemas Operativos (Ord. 1150)"
result = re.search('No aprobó ni está inscripto a ([^()]*)( \(Ord\. 1150\))?', myString)
course = result.group(1) # may have a trailing space, so maybe strip()

答案 1 :(得分:0)

.*greedy,这意味着它会消耗尽可能多的字符。使用.*?使其变得懒惰,从而允许后续(Ord. 1150)匹配,并在末尾添加$以确保读取整个文本(从某种意义上说,抵消.*?)的影响。

>>> string = u'No aprobó ni está inscripto a Sistemas Operativos (Ord. 1150)'
>>> re.match(ur'No aprobó ni está inscripto a (.*?)( \(Ord\. 1150\))?$',
        string).groups()
(u'Sistemas Operativos', u' (Ord. 1150)')