我正在尝试在 Rust 中为包含如下字符串的日志文件编写一个正则表达式:
[2025-01-01T08:17:29.791951550Z INFO] Values: [(311154184, Some(389971313710868251)), (311154187, Some(389967898428572732)), (311154182, Some(389971313710868251)), (311154174, Some(389971313710868251)), (311154178, Some(389971313710868251)), (311154197, Some(389811146843151022)), (311154171, Some(389971313710868251)), (311154167, Some(389971313710868251)), (311154185, Some(389967898428572732)), (311154168, Some(389971313710868251)), (311154191, Some(389967898428572732)), (311154196, Some(389811259875653181)), (311154199, Some(0)), (311154192, Some(389967898428572732)), (311154172, Some(389971313710868251)), (311154181, Some(389971313710868251)), (311154177, Some(389971313710868251)), (311154176, Some(389971313710868251)), (311154179, Some(389971313710868251)), (311154183, Some(389971313710868251)), (311154186, Some(389967898428572732)), (311154175, Some(389971313710868251)), (311154173, Some(389971313710868251)), (311154180, Some(389971313710868251)), (311154190, Some(389967898428572732)), (311154170, Some(389971313710868251)), (311154165, None), (311154189, Some(389967898428572732)), (311154169, Some(389971313710868251)), (311154166, None), (311154195, Some(389967898428572732)), (311154198, Some(287087126717485928)), (311154193, Some(389967898428572732)), (311154188, Some(389967898428572732)), (311154194, Some(389967898428572732))]
在这种情况下,“值”每个都是 u64 和 Option(u64) 的元组,因此有些显示为:(311154170,Some(389971313710868251)),有些显示为:(311154165,None)。
我想捕获所有这些,并最终得到一个像上面一样的元组 Vec,但我无法完全确定正则表达式。我尝试了几次迭代,包括这个:
((\((\d+), (Some\((\d+)\)\)|None\)), )+)
但似乎缺少项目或捕获所有内容,并且仅选择元组而不选择其他元组。我欢迎任何帮助。
我认为在这种情况下你不需要正则表达式,如果你的日志消息的格式一致,一些好的旧字符串操作就可以解决问题并且更易于维护。
我不知道性能怎么样,但这肯定更容易理解,
我知道这并没有真正回答您关于正则表达式的问题,如果您需要使用正则表达式,我深表歉意。
这是使用正则表达式的解决方案。这将生成一个
(u64, Option<u64>)
类型为的向量。