我需要从这样的目录中提取字符串:
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}
如何运作?
编辑:谢谢你们!
答案 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'