我想在Sistemas Operativos
中抓住No aprobó ni está inscripto a Sistemas Operativos (Ord. 1150)
。 (Ord. 1150)
是可选的。它可以出现,也可以不出现。
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的评论。
答案 0 :(得分:2)
尝试
No aprobó ni está inscripto a ([^()]*)( \(Ord\. 1150\))?
然后你只需要这样做:
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)')