鱼C论坛

 找回密码
 立即注册
查看: 1380|回复: 3

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

[复制链接]
发表于 2023-10-18 17:43:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
文档中这样重复出现以
*D_NET 开头的行和以*END 结尾的行
并且这两行中的内容也是分段落出现的,应该如何去获取到
比如*CAP到*RES中间所有的内容,和*RES到*END中间所有的内容呢
2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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开始的新段落。

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

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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  来适应不同的文档结构和需求。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 10:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表