gpt4 book ai didi

python - 提取两个多行分隔符之间的内容并检查是否为空值

转载 作者:太空宇宙 更新时间:2023-11-03 21:28:53 24 4
gpt4 key购买 nike

假设我有一个像这样的输入文件:

#Backup TOC
boot.tar.gz /boot/

#Filesystems
/boot /dev/mapper/VolGroup-lv_root xfs

#Devices
/dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:0:0-part1 PHY /dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:0:0

#UnhandledFS
/var/
/var/log
/var/log/audit
/var/tmp

我想提取每个#header之间的内容(最后一个#UnhandledFS可以忽略),提取后我必须检查是否有任何可用的条目。

下面的代码我用来提取两个#header之间的内容。但它并没有重复

lines = open("./input").readlines()
re.compile('#\w+(.*?)#\w+', re.DOTALL | re.M).findall(''.join(lines))

最佳答案

你的正则表达式的问题是它消耗了“end”#header,这导致它跳过#Filesystems并搞乱你的匹配。

你需要的叫"lookahead" - 这是一种匹配模式而不消耗模式的方法。

这是一个适合您的正则表达式:

re.compile(r'#[^\n]*\n([^#]*)(?=#)', re.DOTALL | re.M).findall(''.join(lines))

它还解决了匹配中包含带有空格的标题的问题,就像示例中的第一个标题一样:单词 TOC 将成为匹配的一部分。

但是,如果您希望对正则表达式进行最少的修复,这也可以(目录部分除外):

re.compile('#\w+(.*?)(?=#\w+)', re.DOTALL | re.M).findall(''.join(lines))

关于python - 提取两个多行分隔符之间的内容并检查是否为空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53665066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com