gpt4 book ai didi

regex - 匹配与前一组相同的重复次数

转载 作者:行者123 更新时间:2023-12-03 11:27:32 25 4
gpt4 key购买 nike

我正在尝试匹配重复次数相同的字符串,例如

abc123
abcabc123123
abcabcabc123123123
etc.

也就是说,我希望第二组(123)与第一组(abc)匹配的次数相同。类似的东西

(abc)+(123){COUNT THE PREVIOUS GROUP MATCHED}

这是使用 Rust 正则表达式箱 https://docs.rs/regex/1.4.2/regex/

编辑 正如我担心的那样,并通过答案和评论指出,这是不可能在正则表达式中表示的,至少在没有 Rust 正则表达式 crate 不支持的某种递归的情况下是不可能的暂时支持一下。在这种情况下,据我所知输入长度是有限的,我只是生成了一个规则,例如

(abc123)|(abcabc123123)|(abcabcabc123123123)

非常丑陋,但完成了工作,因为这不是“严肃的”代码,只是一个有趣的练习。

最佳答案

正如其他人评论的那样,我认为不可能在单个正则表达式中完成此任务。如果您不能保证字符串格式正确,那么您必须使用正则表达式验证它们,捕获每个组,然后比较组长度以验证它们是否具有相同的重复次数。但是,如果保证所有字符串格式正确,那么您甚至不需要使用正则表达式来实现此检查:

fn matching_reps(string: &str, group1: &str, group2: &str) -> bool {
let group2_start = string.find(group2).unwrap();
let group1_reps = (string.len() - group2_start) / group1.len();
let group2_reps = group2_start / group2.len();
group1_reps == group2_reps
}

fn main() {
assert_eq!(matching_reps("abc123", "abc", "123"), true);
assert_eq!(matching_reps("abcabc123", "abc", "123"), false);
assert_eq!(matching_reps("abcabc123123", "abc", "123"), true);
assert_eq!(matching_reps("abcabc123123123", "abc", "123"), false);
}

playground

关于regex - 匹配与前一组相同的重复次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65372679/

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