正则表达式仅在行不以ch开头时匹配模式

2024-09-28 20:42:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有三个完美的正则表达式:

(?<=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/xptoresource66。留下resource23。你知道吗

另外,我写这个是为了一个python脚本,如果有人能给我一个提示,告诉我如何使regex或脚本以某种方式匹配文件中的所有“磁盘”,我将不胜感激!我尝试添加一些标志,但没有成功。你知道吗

谢谢你!你知道吗


Tags: dev脚本模式phy符号条件regexrw
2条回答

'文件'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...

也许是这样的?你知道吗

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']

相关问题 更多 >