gpt4 book ai didi

regex - 花式正则表达式创建多个匹配项

转载 作者:行者123 更新时间:2023-12-03 11:43:10 29 4
gpt4 key购买 nike

我正在使用fancy-regex crate ,因为我需要在正则表达式中进行前瞻性处理,但似乎并不能像使用fancy-regex所基于的regex crate 那样,将所有匹配项都以字符串形式获取:

我正在尝试:

use fancy_regex::Regex;

let value = "Rect2(Vector2(0, 0), Vector2(0, 0))";

let re = Regex::new(r"\(([^()]*)\)").expect("Unable to create regex for values in parenthesis");
let results = re.captures(value).expect("Error running regex").expect("No matches found");

// Since 0 gets the all matches I print them individually.
// Prints 0, 0
println!("{:?}", results.get(1).unwrap());
// Error, no groups
println!("{:?}", results.get(2).unwrap());

现在,如果我尝试使用可用于此正则表达式的正则表达式 crate ,因为该特定正则表达式不像我的其他正则表达式那样使用超前查找,那么它将得到所有的结果。
use regex::Regex;

let value = "Rect2(Vector2(0, 0), Vector2(300, 500))";

let re = Regex::new(r"\(([^()]*)\)").expect("Unable to create regex for values in parenthesis");
let results = re.find_iter(value);

for i in results {
// Prints 0, 0 first and then 300, 500 next time around.
println!("{:?}", i);
}

我似乎无法在fancy-regex中找到具有相同功能的任何东西,即使它基于regex crate 也是如此。我所能找到的只是 captures.iter(),但我也只获得了第一个匹配项。

我做了一个 regex crate here的演示,但是由于 fancy_regex并不是100个顶级 crate 之一,因此我无法做到这一点。

最佳答案

请注意,您的fancy_regex代码在一次匹配中查找两个捕获,由于您的表达式仅包含一个捕获组,因此注定会失败。您想要的(以及您对regex所做的事情)是一种遍历匹配项的方法,但是fancy_regex似乎没有一种简便的方法。因此,您将需要手动执行此操作:

let mut start = 0;
while let Some (m) = re.captures_from_pos (values, start).unwrap() {
println!("{:?}", m.get (1).unwrap());
start = m.get (0).unwrap().start() + 1; // Or you can use `end` to avoid overlapping matches
}

关于regex - 花式正则表达式创建多个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62163974/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com