【发布时间】:2024-05-29 17:10:02
【问题描述】:
我需要从文本文件(嵌入在较大文件中的字母的开头和结尾)中提取两个表达式(开头和结尾)之间的文本。我面临的问题是,字母的开头和结尾都有多种可能的表达方式。
我有一个表达式列表,可能有资格作为开始/结束表达式。我需要从较大的文本(包括开头和结尾表达式)中提取这些表达式的任意组合之间的所有文本,并将其写入一个新文件。
sample_text = """Some random text
asdasd
asdasd
asdasd
**Dear my friend,
this is the text I want to extract.
Sincerly,
David**
some other random text
adasdsasd"""
到目前为止我的代码:
letter_begin = ["dear", "to our", "estimated", ...]
letter_end = ["sincerly", "yours", "best regards", ...]
with open('path/to/input') as infile, open('path/to/output', 'w') as outfile:
copy = False
for line in infile:
if line.strip() == "dear": #shortcomming: only 1 Expression possible here
copy = True
elif line.strip() == "sincerly": #shortcomming: only 1 Expression possible here
copy = False
elif copy:
outfile.write(line)
上面的例子包括“Dear”作为 letter_begin 表达式和“Sicerly”作为 letter_end 表达式。我需要一个灵活的代码,它能够从上面的列表中捕获任何开头和结尾的字母表达式(表达式的任何潜在组合;例如“亲爱的 [...] 休息”或“估计 [...]真诚的”)
【问题讨论】:
-
你真正想从上面的文本中提取什么?
-
嗨,蒂姆,我想提取“亲爱的朋友,这是我要提取的文本。真诚的,大卫”,其中“亲爱的”表示开始,“真诚”表示结束字母 - 开头和结尾的标识必须灵活,因为我想遍历一堆文件(具有不同的开头和结尾表达式)
-
所以你只想提取一个包含
Dear my friend的单行,对吗? -
不,我想提取从“亲爱的”开始到“真诚”结束的所有文本 [+ 之后的单词,这是名字”。从上面的示例中,所需的输出将是“亲爱的我朋友,这是我要提取的文字。此致,大卫”
标签: python regex text-mining text-extraction