【发布时间】:2021-06-22 14:26:54
【问题描述】:
我首先要说我是 rust 新手。实际上,这是我尝试编写的第一个 Rust 程序。
我可以逐行读取(大)文件,并使用以下代码检查哪些行包含模式"PerfectSwitch-0 : Message:":
use std::fs::File;
use std::io::{self, prelude::*, BufReader};
fn main() -> io::Result<()>{
let file = File::open("../test.out")?;
let reader = BufReader::new(file);
for line in reader.lines(){
let line = line.unwrap();
if line.contains("PerfectSwitch-0: Message:"){
println!("{}", line);
}
}
Ok(())
}
但是,我真正想做的是修改此代码,使我的模式可以匹配 "PerfectSwitch-0 : Message:"、"PerfectSwitch-1 : Message:"、"PerfectSwitch-2 : Message:"、...、"PerfectSwitch-8 : Message:" 和 "PerfectSwitch-9 : Message:",没有正则表达式。
这样做的原因是我认为在这种情况下使用正则表达式有点过头了,它可能会减慢我的程序(?)。
我试过写if line.contains("PerfectSwitch-?: Message:"),但不出所料,它没有用。
有人知道这是否可行吗?
谢谢
【问题讨论】:
-
为什么正则表达式过大?为什么你认为它会减慢你的程序?也许它会加快速度!为什么不试一试呢?
-
我不确定。正如我所说,这是我第一次接触 Rust。不使用正则表达式似乎“更简单”。但我肯定会试一试。如果可以在没有正则表达式的情况下做我想做的事,那么进行一些比较会很好。
-
我认为在这种特定情况下使用正则表达式会更简单。标准库没有模式匹配工具。所以你要么需要自己动手(不简单),要么只实现自己的小解析器(可能很简单,但不像使用正则表达式那么简单)。
-
答案解决了您的问题吗?