gpt4 book ai didi

python - 使用 python 提取两个模式之间的字符

转载 作者:行者123 更新时间:2023-12-01 06:49:07 24 4
gpt4 key购买 nike

我有一个包含很多行的文件,我想在列表中提取这些信息= ['sheep','cow','buffalo']

animal wild -list {
tiger lion hyena
}
aaaa
bbbb
cccc
animal domesticated_0 -list {
sheep
}
dddd
animal domesticated_1 -list {
cow buffalo
}
eeee

我正在使用下面的代码,但它离我想要的还很远。

temp_list = ['domesticated_0','domesticated_1']
start = False

for i in temp_list:
for line in file:
if start:
f1.write(line)
if li.endswith("}"):
start = False
elif not li.startswith("animal"):
start = False
elif li.startswith("animal") and i in line:
f1.write(line)
start = True
if li.endswith("}"):
start = False

最佳答案

此解决方案使用正则表达式:

(?:\banimal\s+domesticated_[01]\s+-list\s+{\s*)((?:\b\w+\b(?:\s*))+)(?:})
  1. (?:\banimal\s+domesticated_[01]\s+-list\s+{\s*) 匹配字边界上的 animal 后跟一个或更多空格,后跟 domesticated_,后跟 01,后跟一个或多个空格,后跟 -list后跟一个或多个空格,后跟 { 后跟 0 个或多个空格,全部位于非捕获组中。
  2. ((?:\b\w+\b(?:\s*))+) 匹配单词边界上单词出现 1 次或多次,后跟 0 个或多个空格(组1).
  3. (?:}) 与非捕获组中的 } 匹配。

在上面的正则表达式捕获一串动物后,例如'cow bufallow',尾随空格将被删除,字符串将按空格分割并附加到动物列表中:

代码:

import re

text = """
animal wild -list {
tiger
lion
hyena
}
aaaa
bbbb
cccc
animal domesticated_0 -list {sheep}
dddd
animal domesticated_1 -list {
cow
buffalo
}
eeee """

animals = []
for m in re.finditer(r'(?:\banimal\s+domesticated_[01]\s+-list\s+{\s*)((?:\b\w+\b(?:\s*))+)(?:})', text):
animals.extend(re.split(r'\s+', m.group(1).strip()))
print(animals)

打印:

['sheep', 'cow', 'buffalo']

您可以并且应该将正则表达式替换为:

(?:\banimal\s+domesticated_\d+\s+-list\s+{\s*)((?:\b\w+\b(?:\s*))+)(?:})

if domesticated_ 后面可以跟除 01 之外的任何数字。

See Demo

关于python - 使用 python 提取两个模式之间的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59104579/

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