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

2024-10-03 02:39:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在No aprobó ni está inscripto a Sistemas Operativos (Ord. 1150)中捕捉Sistemas Operativos(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的评论。你知道吗


Tags: no字符串renone示例评论estni
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()

.*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)')

相关问题 更多 >