Python正则表达式向后搜索

时间:2014-01-05 20:49:30

标签: python regex

我需要从这样的目录中提取字符串:

my_new_string = "C:\\Users\\User\\code\\Python\\final\\mega_1237665428090192022_cts.ascii"
ID = '1237665428090192022'
m = re.match(r'.*(\b\w+%s)(?<!.{%d})' % (ID, -1), my_new_string)
if m: print m.group(1)

我需要从上面的my_new_string中提取“mega”。目前,上面只有mega_1237665428090192022,所以如何让它忽略ID号?

说实话,即使在咨询文档之后,我也不明白这些表达是如何工作的。 r'做了什么? ?<!.{%d}如何运作?

编辑:谢谢你们!

2 个答案:

答案 0 :(得分:2)

有几种方法可以做到这一点,虽然我不确定你是否一定需要一个正则表达式。以下是一些选项:

>>> import os.path
>>> my_new_string = "C:\\Users\\User\\code\\Python\\final\\mega_1237665428090192022_cts.ascii"
>>> os.path.basename(my_new_string)
'mega_1237665428090192022_cts.ascii'
>>> basename = os.path.basename(my_new_string)
>>> basename.split('_')[0]
'mega'
>>> import re
>>> re.match(r'[A-Za-z]+', basename).group()
'mega'

我不认为你正在寻找负面的先行断言或负面的后视断言。如果有的话,你想匹配,如果数字跟随。例如,像这样:

>>> re.match(r'.*?(?=[_\d])', basename).group()
'mega'

r只是生成一个原始字符串(例如,你不需要经常逃避反斜杠)。

答案 1 :(得分:1)

>>> m = re.match(r'.*\b(\w+)_(%s)(?<!.{%d})' % (ID, -1), my_new_string)
>>> m.groups()
('mega', '1237665428090192022')

>>> m.group(1)
'mega'