Regex для сопоставления с шаблоном, только если строка не начинается с символа - PullRequest
0 голосов
/ 29 января 2019

У меня есть три прекрасно работающих регулярных выражения:

(?<=drbd:(?!.*/dev/.*))[^,]+
/dev/drbd.+?(?=,)
(?<=phy:(?!.*drbd.*))[^,]+

Мне нужно, чтобы все они соответствовали, только если строка, которую они пытаются сопоставить, не начинается с символа '#';то есть строка не закомментирована.

Все мои попытки совпадали с началом самой строки, но я хочу, чтобы это было просто условием либо совпадения с шаблоном, либо нет.

disk = [ 'phy:/dev/vg0/xpto,xvda,rw']
#disk = [ 'drbd:resource23,xvda,rw']
disk = [ 'drbd:resource66,xvda,rw'

Мне нужно сопоставить /dev/vg0/xpto и resource66.оставляя resource23 позади.

Кроме того, я пишу это для скрипта на Python, если кто-нибудь может дать мне подсказку о том, как сделать регулярное выражение или скрипт каким-либо образом соответствовать всем «дискам» в файле, Я бы оценил это!Я попытался добавить несколько флагов, но безуспешно.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Может как то так?

import re

content = """disk = [ 'phy:/dev/vg0/xpto,xvda,rw']
#disk = [ 'drbd:resource23,xvda,rw']
disk = [ 'drbd:resource66,xvda,rw'"""


get_paths = re.compile(r'(?mi)^(?!#).+(?:phy:|drbd:)(.+?),').findall
paths = get_paths(content)
print(paths)

# ['/dev/vg0/xpto', 'resource66']
0 голосов
/ 29 января 2019

Данные файла 'testfile.txt':

disk = ['phy:/dev/vg0/xpto,xvda,rw']

disk = ['drbd:resource66,xvda,rw']

with open('testfile.txt') as f_Obj:
    lines = f_Obj.readlines()
    for line in lines:
        if not line.startswith('#'):
            do_something...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...