繁体   English   中英

Python正则表达式向后搜索

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM