Big-Man 发表于 2023-10-18 17:43:55

文档中出现重复段落,并对段落中的信息提取

文档中这样重复出现以
*D_NET 开头的行和以*END 结尾的行
并且这两行中的内容也是分段落出现的,应该如何去获取到
比如*CAP到*RES中间所有的内容,和*RES到*END中间所有的内容呢

Mike_python小 发表于 2023-10-18 17:44:29

你可以通过正则表达式来提取这些重复出现的段落信息。以下是一个解决方案,用于从文档中提取以*D_NET 开头和以*END 结尾的段落。


import re

# 读取文档内容
with open('document.txt', 'r') as f:
    content = f.read()

# 使用正则表达式匹配*D_NET到*RES段落中的内容
pattern = re.compile(r'\*D_NET((?!^\*RES).)+\*\sRES', re.DOTALL | re.MULTILINE)
matches = pattern.findall(content)

# 输出结果
for match in matches:
    print(match)

# 使用正则表达式匹配*RES到*END段落中的内容
pattern = re.compile(r'\*RES((?!^\*END).)+\*\sEND', re.DOTALL | re.MULTILINE)
matches = pattern.findall(content)

# 输出结果
for match in matches:
    print(match)


在这个程序中,我们首先打开一个文本文件并读取其内容。我们使用正则表达式来匹配以*D_NET开始和以*END结尾的段落。使用re.compile()函数编译正则表达式,然后使用findall()函数在文本中查找所有匹配项。

在第一个正则表达式中,我们匹配以*D_NET开始到*RES结束的段落内容,使用了否定向前预测来排除由*RES开始的新段落。在第二个正则表达式中,我们匹配以*RES开始到*END结束的段落内容,依然使用了否定向前预测来排除由*END开始的新段落。

这个程序可以提取出这些重复出现的段落信息并输出到控制台上。你可以根据需要修改代码以适用于你的文档。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

陶远航 发表于 2023-10-18 17:44:34

您可以使用Python的正则表达式库(re)来解决这个问题。以下是一个示例代码,可以帮助您提取*D_NET到*END之间的内容,包括*CAP到*RES和*RES到*END之间的内容:

import re

# 假设您的文档内容存储在变量text中
text = \"\"\"
*D_NET
Some content here
*CAP
Content between CAP and RES
*RES
Content between RES and END
*END
\"\"\"

# 使用正则表达式找到*D_NET到*END之间的所有内容
matches = re.findall(r'\\*D_NET(.*?)\\*END', text, re.DOTALL)

# matches现在包含了所有匹配的内容,每个匹配都是一个字符串
for match in matches:
    # 再次使用正则表达式,分别找到*CAP到*RES和*RES到*END之间的内容
    cap_to_res = re.search(r'\\*CAP(.*?)\\*RES', match, re.DOTALL)
    res_to_end = re.search(r'\\*RES(.*?)\\*END', match, re.DOTALL)

    if cap_to_res:
      print(\"Content between *CAP and *RES:\")
      print(cap_to_res.group(1).strip())# 使用group(1)获取匹配的内容,使用strip()去除前后的空白字符

    if res_to_end:
      print(\"Content between *RES and *END:\")
      print(res_to_end.group(1).strip())


这个代码首先找到所有*D_NET到*END之间的内容,然后对每个匹配的内容,再分别找到*CAP到*RES和*RES到*END之间的内容。注意,这个代码假设*CAP和*RES,*RES和*END之间的内容不会包含这些标记本身。如果实际情况不是这样,您可能需要修改正则表达式以适应您的需求。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案

isdkz 发表于 2023-10-18 17:44:50

您可以使用正则表达式来提取文档中特定段落的内容。以下是一个示例代码,可以帮助您实现这个功能:

import re

def extract_paragraphs(text, start_pattern, end_pattern):
    # 构建正则表达式模式,匹配以start_pattern开头,以end_pattern结尾的段落
    pattern = r'{}(.*?){}'.format(re.escape(start_pattern), re.escape(end_pattern))
    # 使用re.findall函数查找匹配的段落
    paragraphs = re.findall(pattern, text, re.DOTALL)
    return paragraphs

# 示例用法
document = """
文档中这样重复出现以
*D_NET 开头的行和以*END 结尾的行
并且这两行中的内容也是分段落出现的,应该如何去获取到
比如*CAP到*RES中间所有的内容,和*RES到*END中间所有的内容呢

*D_NET
这是第一个段落的内容
*CAP
这是第一个段落的第二行
*RES
这是第一个段落的第三行
*END

*D_NET
这是第二个段落的内容
*CAP
这是第二个段落的第二行
*RES
这是第二个段落的第三行
*END
"""

start_pattern = "*D_NET"
end_pattern = "*END"

result = extract_paragraphs(document, start_pattern, end_pattern)
for paragraph in result:
    print(paragraph)


这段代码中, extract_paragraphs函数接受三个参数: text是要提取段落的文本, start_pattern是段落开始的模式, end_pattern是段落结束的模式。函数使用re.findall函数和正则表达式模式来查找匹配的段落,并返回一个包含所有匹配段落的列表。

在示例代码中,我们将文档作为字符串传递给extract_paragraphs函数,并指定*D_NET作为段落开始的模式, *END作为段落结束的模式。然后,我们遍历提取到的段落列表,并打印每个段落的内容。

输出结果将是:

这是第一个段落的内容
这是第一个段落的第二行
这是第一个段落的第三行

这是第二个段落的内容
这是第二个段落的第二行
这是第二个段落的第三行


您可以根据实际情况修改start_pattern和end_pattern来适应不同的文档结构和需求。
页: [1]
查看完整版本: 文档中出现重复段落,并对段落中的信息提取