Python 仅当行不以字符开头时才匹配模式的正则表达式
我有三个完美工作的正则表达式:Python 仅当行不以字符开头时才匹配模式的正则表达式,python,regex,Python,Regex,我有三个完美工作的正则表达式: (?<=drbd:(?!.*/dev/.*))[^,]+ /dev/drbd.+?(?=,) (?<=phy:(?!.*drbd.*))[^,]+ 我需要匹配/dev/vg0/xpto和resource66。留下resource23 另外,我写这篇文章是为了一个python脚本,如果有人能给我一个关于如何使正则表达式或脚本以某种方式匹配文件中所有“磁盘”的提示,我将不胜感激!我尝试添加一些标志,但没有成功 谢谢大家! 文件“testfile.txt”
(?<=drbd:(?!.*/dev/.*))[^,]+
/dev/drbd.+?(?=,)
(?<=phy:(?!.*drbd.*))[^,]+
我需要匹配/dev/vg0/xpto
和resource66
。留下resource23
另外,我写这篇文章是为了一个python脚本,如果有人能给我一个关于如何使正则表达式或脚本以某种方式匹配文件中所有“磁盘”的提示,我将不胜感激!我尝试添加一些标志,但没有成功
谢谢大家! 文件“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']
在应用正则表达式之前,我只需要使用
str.startswith
过滤行。你能发布你正在使用的代码吗?这个答案的警告是,它必须严格以“#”字符开头。如果行的“#”前面有空格,则行.startswith(“#”)将返回False。类似于re.search(r'\S*#',line)的东西是None的
将覆盖这一点。如果行的'#'前面有空格,我们可以使用line.lstrip().startswith('#')方法,它将返回True
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']