You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中如何过滤字符串仅保留字母、数字与空格以匹配关键词?

Rust 文件扫描:过滤特殊字符并匹配关键词

核心思路

先对文件内容做全局预处理,过滤掉所有非字母、数字、空格的字符,再按空格分割单词进行匹配,就能解决带括号等特殊字符的关键词识别问题。

实现代码

use std::collections::HashSet;
use std::process;

fn main() {
    // 假设file是读取到的文件内容字符串
    let file = "Some text with codeword(123) and Password! here";

    // 1. 预处理:过滤掉非字母、数字、空格的字符
    let cleaned_content: String = file.chars()
        .filter(|c| c.is_alphanumeric() || c.is_whitespace())
        .collect();

    // 2. 定义需要匹配的关键词集合(转为小写,统一匹配逻辑)
    let target_keywords: HashSet<&str> = ["password", "codeword"].iter().cloned().collect();

    // 3. 分割单词并匹配
    for word in cleaned_content.split_whitespace() {
        let lower_word = word.to_lowercase();
        if target_keywords.contains(lower_word.as_str()) {
            println!("{} was found", lower_word);
            process::exit(0);
        }
    }

    // 如果没有匹配到关键词
    println!("No target keywords found");
}

代码说明

  • 字符过滤:通过chars()遍历每个字符,filter保留is_alphanumeric()(字母/数字)或is_whitespace()(空格)的字符,最后collect成新字符串,彻底去除括号、感叹号等特殊字符。
  • 关键词集合:用HashSet存储关键词,相比硬编码的match分支更灵活,后续新增关键词只需修改集合内容即可。
  • 匹配逻辑:将每个处理后的单词转为小写,检查是否在关键词集合中,匹配到就打印信息并退出程序。

大文件优化方案

如果扫描的文件体积较大,建议按行读取处理,避免一次性加载全部内容占用过多内存:

use std::fs::File;
use std::io::{BufRead, BufReader};
use std::collections::HashSet;
use std::process;

fn main() -> std::io::Result<()> {
    let file = File::open("target_file.txt")?;
    let reader = BufReader::new(file);
    let target_keywords: HashSet<&str> = ["password", "codeword"].iter().cloned().collect();

    for line in reader.lines() {
        let line = line?;
        let cleaned_line: String = line.chars()
            .filter(|c| c.is_alphanumeric() || c.is_whitespace())
            .collect();
        
        for word in cleaned_line.split_whitespace() {
            let lower_word = word.to_lowercase();
            if target_keywords.contains(lower_word.as_str()) {
                println!("{} was found", lower_word);
                process::exit(0);
            }
        }
    }

    println!("No target keywords found");
    Ok(())
}

内容的提问来源于stack exchange,提问作者user21391428

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:23:13