[英]Python Regular Expression searching backwards
我需要从这样的目录中提取一个字符串:
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}
工作原理是什么?
编辑:谢谢大家!
有几种方法可以做到这一点,尽管我不确定您是否一定需要一个正则表达式。 以下是一些选项:
>>> 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只是生成一个原始字符串(例如,您不需要经常转义反斜杠)。
>>> m = re.match(r'.*\b(\w+)_(%s)(?<!.{%d})' % (ID, -1), my_new_string)
>>> m.groups()
('mega', '1237665428090192022')
>>> m.group(1)
'mega'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.