[英]Regular expression to extract contents between two specific words using python(or nltk)
我正在尝试建立一个类并将每首诗作为一个对象,它具有标题(后跟“ POEM:”),作者和内容的属性。 我提取了标题和作者,并将其放在列表中。 但是,我不知道如何提取内容并将其放入列表中。
我有一个包含许多诗歌的txt文件。 诗歌样本为:
POEM: lala AUTHOR: la
aaaaaaaaaaaaaa,
aaaaaaaaa,
akaaaaaaaa
POEM: alal AUTHOR: al
llllllllllll,
llllll.
llllllll,
lllllllllll
POEM: lal AUTHOR:as
sssssssss,
sssssss,
sssssss
这就是我所做的
import re
f=open('Poems.txt', 'r')
data=f.read().replace('\n','')
re.findall(r"^POEM:.*?(?=POEM)",data)
我想将所有诗歌作为单独的字符串放在列表中,但我只能得到第一首诗。
'POEM: lala AUTHOR: la, aaaaaaaaaaaaaa, aaaaaaaaa, akaaaaaaaa'
不使用正则表达式的解决方案要容易得多。
首先您打开文件
f=open('Poems.txt', 'r').read()
您将获得包含您问题最后一部分中显示的预期输出的诗歌列表
poems_list = ["POEM" + s for s in f.split("POEM")]
由于拆分功能,我们删除了第一个元素,因为它为空
poems_list.pop(0)
到目前为止, poems_list
会给我们其他用户在其问题中发布的内容。 但是,如果您实际上想解析数据(我想使用正则表达式是您的意图),则可以继续进行以下操作:
我们遍历诗歌列表中的每首诗歌,以分析其中包含的数据
for poem in poems_list:
首先,我们用poem关键字将其拆分,请记住,必须在分号和诗歌名称之间留一个空格,否则它将不起作用(无需修改代码)
i1 = poem.split('POEM: ')
现在,我们将其按作者划分,然后再适当保留尾随空格。 我们将i1作为第二个元素,因为第一个是诗歌名称,其余的内容现在存储在列表的第二个元素中。
i2 = i1[1].split(' AUTHOR: ')
再次,我们将使用列表中的第二个元素来获取文本的其余部分。 我们用新行将其分开,因为这首诗在陈述作者后在换行后开始
i3 = i2[1].split('\n')
我们保存获得的值
poem_name = i2[0]
poem_author = i3[0]
poem_content = i3[1]
现在轮到您按自己的意愿处理数据了。 我建议您将其存储在字典中。
所有没有解释的代码(用于复制粘贴):
f=open('Poems.txt', 'r').read()
poems_list = ["POEM" + s for s in f.split("POEM")]
poems_list.pop(0)
for poem in poems_list:
i1 = poem.split('POEM: ')
i2 = i1[1].split(' AUTHOR: ')
i3 = i2[1].split('\n')
poem_name = i2[0]
poem_author = i3[0]
poem_content = i3[1]
我不建议您将数据存储在该文件中。 这是非常低效的,微小的修改会在代码的功能上造成很大的问题,这需要进行大量的修改。 强烈建议使用数据库,大熊猫,csv格式甚至泡菜来存储字典,或者至少格式化一点更好。
\s*(?=POEM:)
注意 :上面的正则表达式只是捕获空白并声明位置匹配(正向提前)。 有关更多详细信息,请参见说明。
基础
import re
s = "Your string here"
r = r"\s*(?=POEM:)"
print re.split(r, s)
实践中 (带有示例字符串)
import re
s = """POEM: lala AUTHOR: la
aaaaaaaaaaaaaa,
aaaaaaaaa,
akaaaaaaaa
POEM: alal AUTHOR: al
llllllllllll,
llllll.
llllllll,
lllllllllll
POEM: lal AUTHOR:as
sssssssss,
sssssss,
sssssss"""
r = r"\s*(?=POEM:)"
print re.split(r, s)
[
'POEM: lala AUTHOR: la\naaaaaaaaaaaaaa,\naaaaaaaaa,\nakaaaaaaaa',
'POEM: alal AUTHOR: al\nllllllllllll,\nllllll.\n\nllllllll,\nlllllllllll',
'POEM: lal AUTHOR:as\nsssssssss,\nsssssss,\nsssssss'
]
\\s*
匹配任意数量的空格字符 (?=POEM:)
积极的前瞻性,确保随后的内容与POEM:
完全匹配
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.