gpt4 book ai didi

regex - 使正则表达式量词的长度取决于先前的捕获组

转载 作者:行者123 更新时间:2023-12-03 11:34:08 24 4
gpt4 key购买 nike

我希望使用正则表达式来解析以整数n开头的字符串。空格后有n个字符,之后可能会有更多文本。我希望捕获n个以及随后的n个字符。这n个字符没有限制。换句话说,5 hello world应该与捕获组5hello匹配。
我尝试了此正则表达式,但由于其结构取决于输入:(\d+) .{\1},因此无法编译。
有没有办法让regex编译器执行我想要的操作,还是我必须自己解析它?
如果重要的话,我正在使用Rust的regex crate 。并且如果regex无法实现,是否可以使用另一个更复杂的正则表达式引擎呢?
谢谢!

最佳答案

正如@Cary Swoveland在评论中说的那样,如果不对各种可能的长度进行硬编码,则一步一步在正则表达式中是不可能的。
但是,从匹配的数字中获取长度为匹配的字符串的子字符串并不是太困难:

use regex::Regex;

fn main() {
let re = Regex::new(r"(\d+) (.+)").unwrap();
let test_str = "5 hello world";

for cap in re.captures_iter(test_str) {
let length: usize = cap[1].parse().unwrap_or(0);
let short_match: String = cap[2].chars().take(length).collect();

println!("{}", short_match); // hello
}
}
如果您知道只处理ASCII字符(不处理Unicode,重音符号等),则可以使用更简单的切片语法 let short_match = &cap[2][..length];

关于regex - 使正则表达式量词的长度取决于先前的捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62707587/

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