如何在Rust中通过指定单组正则将字符串分割为两组?
要获取第二组(所有匹配分隔符正则的部分拼接结果),你可以用regex crate提供的find_iter方法,它能遍历字符串中所有匹配正则的子串,之后把这些子串拼接起来就行。
直接上代码示例:
use regex::Regex; fn main() { let text = "123abcdef456ghj789"; let re = Regex::new(r"\d+").unwrap(); // 你已经实现的第一组:非分隔符部分拼接 let text1 = re.split(text).join(""); // abcdefghj // 获取第二组:所有匹配分隔符的部分拼接 let text2 = re.find_iter(text) .map(|match_result| match_result.as_str()) .collect::<String>(); // 123456789 println!("第一组:{}", text1); println!("第二组:{}", text2); }
如果你的项目已经依赖了itertools,也可以用它的join方法来拼接,写法更简洁:
use itertools::Itertools; use regex::Regex; fn main() { let text = "123abcdef456ghj789"; let re = Regex::new(r"\d+").unwrap(); let text2 = re.find_iter(text) .map(|m| m.as_str()) .join(""); // 123456789 }
原理很简单:find_iter会逐个找出字符串中所有符合正则\d+的子串,再通过map把每个匹配结果转换成字符串切片,最后用collect或join把这些切片拼接成完整的字符串,就是你要的第二组内容。
内容的提问来源于stack exchange,提问作者mdcq
相关产品推荐
相关产品推荐

