Python Если подстрока существует в строке, получить ее контекст между relimiters - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть список строк, которые следуют шаблону, так что в некоторой позиции в строке может быть подстрока RAM. пример:

sdfjhsk_sdkjfhs_RAM_lkfdgjls

Иногда эта строка может иметь другой символ после нее. например:

aaaa_RAMA_sfsffgd

Мне нужно иметь весь контекст между ближайшими подчеркиваниями, поэтому RAM в первом случае, RAMA во втором.

И он может вообще не существовать в строке например:

sfdks_sdfsdf_sdfsdf_sdfsdfsdf

Допускаются совпадения в начале или конце строки:

RAMsdoa_saeorfioa_noutd  -> RAMsdoa
aetu_eaei_sdsdf_RAMSdoa  -> RAMsdoa

как совпадения в строках без подчеркивания:

sdasids -> nothing
sdfRAMso -> sdfRAMso

Каков наилучший способ поиска строки и, если она содержит шаблон RAM, и, если он есть, перехватывает все, что находится между ближайшими разделителями _ (или началом или концом строки, если ближе)?

1 Ответ

0 голосов
/ 08 сентября 2018

Вы можете использовать регулярное выражение здесь. Вам необходимо сопоставить RAM, плюс любые символы, отличные от _, до и после:

import re

def find_ram_context(inputtext):
    match = re.search(r'[^_]*RAM[^_]*', inputtext)
    if match:
        return match.group(0)

[^...] - отрицательное совпадение набора символов; все, что не в этом наборе будет совпадать. Здесь это _, а * означает, что таких символов должно быть ноль или более. Поэтому любой символ до или после RAM, не являющийся подчеркиванием, будет вставлен в соответствующий текст.

Приведенная выше функция возвращает соответствующий контекст, или None, если слово RAM отсутствует:

>>> find_ram_context('sdfjhsk_sdkjfhs_RAM_lkfdgjls')
'RAM'
>>> find_ram_context('aaaa_RAMA_sfsffgd')
'RAMA'
>>> find_ram_context('sfdks_sdfsdf_sdfsdf_sdfsdfsdf') is None
True

Онлайн-демонстрация регулярных выражений с вашими тестами в https://regex101.com/r/6VcLrC/1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...