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