查找字串简洁版

news/2025/2/6 5:09:06/文章来源:https://www.cnblogs.com/hi-hooge/p/18700396
以下是简洁版的 Python 代码,用于查找多个字符串,要求它们出现在相近的位置(间隔不超过 `max_distance` 个字符),并输出包含这些字符串前后 40 个字的内容:

### 简洁版代码
```python
import re

def search_and_extract(input_file, output_file, search_texts, max_distance=40):
    with open(input_file, 'r', encoding='utf-8') as file:
        content = file.read()

    # 构建正则表达式模式
    pattern = re.compile(
        r'.{0,40}%s.{0,%d}%s.{0,40}' % (
            re.escape(search_texts[0]), max_distance, re.escape(search_texts[1])
        )
    )

    # 查找匹配的内容
    matches = pattern.findall(content)

    # 写入结果
    with open(output_file, 'w', encoding='utf-8') as file:
        for match in matches:
            file.write(match + '\n')

# 示例用法
input_file = 'input.txt'  # 输入文件路径
output_file = 'output.txt'  # 输出文件路径
search_texts = ['字符串1', '字符串2']  # 要查找的多个字符串
max_distance = 40  # 字符串之间的最大间隔字符数

search_and_extract(input_file, output_file, search_texts, max_distance)
```

---

### 代码说明:
1. **正则表达式**:
   - `r'.{0,40}%s.{0,%d}%s.{0,40}'`:
     - `.{0,40}`:匹配任意字符(最多 40 个)。
     - `%s`:插入第一个字符串(`search_texts[0]`)。
     - `.{0,%d}`:匹配两个字符串之间的字符(最多 `max_distance` 个)。
     - `%s`:插入第二个字符串(`search_texts[1]`)。
     - `.{0,40}`:匹配第二个字符串后的任意字符(最多 40 个)。

2. **`re.escape`**:
   - 对字符串进行转义,确保正则表达式中的特殊字符(如 `.`、`*` 等)被正确处理。

3. **`pattern.findall`**:
   - 查找所有匹配的内容。

4. **写入结果**:
   - 将匹配的内容逐行写入输出文件。

---

### 示例:
#### 输入文件 (`input.txt`):
```plaintext
这是一个测试文档,包含一些字符串1和其他内容。
字符串1和字符串2之间的间隔不超过40个字符。
这是一个简单的测试,用于演示多字符串查找功能。
```

#### 查找字符串:
```python
search_texts = ['字符串1', '字符串2']
max_distance = 40
```

#### 输出文件 (`output.txt`):
```plaintext
这是一个测试文档,包含一些字符串1和其他内容。
字符串1和字符串2之间的间隔不超过40个字符。
```

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/879356.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Vie] 依赖预构建

使用Vite模板vue-ts. https://github.com/vitejs/vite/tree/main/packages/create-vite 一个组件在没加入Lodash之前:当加入lodash之后,会自动把它加入到.vite/deps中去: 假如不用依赖构建 vite.config.tsreturn {plugins: [vue()],// ...optimizeDeps: {exclude: [lodash-…

从源码分析arm64中断与GIC

本文以树莓派4b(armv8)来实现,4b支持两种传统的中断控制器 gic-400 但是使用的qemu和实际的板子都是默认支持gic-400的,所以主要是借助gic-400实现中断的功能异常处理 相关寄存器PSTATE 就是cpu状态DAIF 调试异常 SError(系统异常) IRQ(中断) FIQ(快速中断)esr_elx 用来保存返…

《gm/ID设计法基本介绍》翻译

最近流片很累很焦虑,放松心情找篇讲\(g_m/I_D\)设计法的文档翻译一下: 《A Basic Introduction to the gm/ID-Based Design Methodology》 1. 摘要 该文章向读者介绍了基于\(g_m/I_D\)的设计方法学,用于帮助CMOS模拟电路设计者将晶体管物理参数与小信号模型联系起来,文章的…

个人英语学习笔记基于B站英语的平行世界语法课程

导读 语言学习没有捷径,只要听说读写这四大行长期日复一日的练习就行了,兴趣是最重要的,兴趣就是高效学习的基础和长期坚持下去的动力。 0基础开始痛苦学习大半年英语,没兴趣的结果就是词汇量是上去了,但是英语的听说读写水平还不如学了一年的日语。😅 该笔记基于此课程…

PostgreSQL:数据库迁移与版本控制

title: PostgreSQL:数据库迁移与版本控制 date: 2025/2/6 updated: 2025/2/6 author: cmdragon excerpt: 在现代软件开发中,数据库作为应用程序的核心组件之一,数据的结构和内容必须能够随着业务需求的变化而调整。因此,数据库迁移和版本控制成为了确保数据一致性、完整性…

Servlet基础

什么是Servlet、Servlet的架构、Servlet任务、Servlet的基本使用、Servlet的生命周期、Servlet API中主要接口及实现类、Servlet的部署(注册与映射)、缺省Servlet与启动时加载配置、ServletConfig与ServletContext、request和response什么是Servlet基础 Java Servlet 是运行在…

GNURadio模块学习——Source and Sink类

介绍GNU Radio中常见的 Source 与 Sink 模块,包括流程图端口、音频输入输出、虚拟连接、文件读写、ZMQ跨流程图通信,以及随机信号源、固定信号源、噪声源等常见信号源和时域、频域、星座图等信号展示工具。Source and Sink Pad(流程图端口) 当该流程图是hierarchical block…

【C++】gflag使用指南

一、什么是gflags? gflags 是一个用于定义命令行参数的 C++ 库,它由 Google 开发并开源。通过 gflags,你可以轻松地在你的程序中添加各种类型的命令行选项,包括整数、布尔值、字符串等,并且可以为这些选项设置默认值。此外,gflags 还提供了强大的帮助信息生成功能,使得用…

【C++】Google benchmark理解与应用

一、介绍 Google Benchmark 是一个用于 C++ 的微基准测试库。它旨在帮助开发者编写出更高效、更具表现力的基准测试代码。通过使用 Google Benchmark,可以方便地测量函数或代码片段的性能,并且能够生成详细的报告。 二、安装与配置 2.1 安装 在Ubuntu环境中安装Google Benchm…

LRU浅析

LRU算法LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使…

20250205 省选模拟赛 T3

20250205 省选模拟赛 T3 Description 设计一个 \(n\times n\) 的 01 矩阵,使得从 \((1,1)\) 走到 \((n,n)\) 且只能向右或下走且只经过为 \(1\) 的格子的方案数为 \(X\)。 \(n \leq 24\) 时得满分。\(X \leq 10^9\)。 Solution 基于 \(2\) 进制的构造方法我们称从左上到右下的…

Automa:自动化浏览器工作流

🏷️仓库名称:AutomaApp/automa 🌟截止发稿星数: 14340 (今日新增:33) 🇨🇳仓库语言: Vue 🤝仓库开源协议:Other 🔗仓库地址:https://github.com/AutomaApp/automa引言 Automa是一个浏览器扩展,允许用户通过连接模块来自动化浏览器任务。它消除了重复性任务的需…