簡體   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